json - NewtonSoft.Json 的 JObject 的枚举在 C# 中丢失了 '\' 字符
问题描述
我想使用 NewtonSoft.Json 解析JObject.Parse()
json字符串。假设 json 字符串是这样的:
{"json":"{\"count\":\"123\"}"}
结果
jObject.First.ToString()
是"json": "{\"count\":\"123\"}"
。结果
jObject["json"].ToString()
是{"count":"123"}
。枚举得到与此相同的结果。
我使用的测试代码是这样的。
[TestMethod()]
public void JsonParseTest()
{
var json = "{\"json\":\"{\\\"count\\\":\\\"123\\\"}\"}";
var jObject = JObject.Parse(json);
Console.WriteLine($"json : {json}");
Console.WriteLine($"jObject.First.ToString() : {jObject.First}");
Console.WriteLine($"jObject[\"json\"].ToString() : {jObject["json"]}");
}
我们可以看到枚举 jObject 会丢失字符'\'。问题是什么?我将不胜感激任何建议:)
编辑 1 NewtonSoft 的版本是 2019.11.09 发布的 12.0.3。
解决方案
解析器没有丢失任何东西。您的示例中没有文字\
。反斜杠纯粹是 JSON 语法的一部分,用于转义"
字符串 vlue 内部。键的json
值为 {"count":"123"}
。
如果您想在该值中使用反斜杠(但是我不明白您为什么要这样做),那么您需要添加它们,就像您在 C# 字符串中添加它们一样(C# 和 JSON 恰好具有相同的转义机制) :
{"json":"{\\\"count\\\":\\\"123\\\"}"}
with 导致 C# 代码:
var json = "{\"json\":\"{\\\\\\\"count\\\\\\\":\\\\\\\"123\\\\\\\"}\"}";
推荐阅读
- python - 如何在 Python 中子包/模块的命名空间中获取父模块/包函数?
- python - 在 Python 中,如何使用以内部函数作为参数的外部函数来计时函数的执行时间?
- javascript - 如何在reactjs中的图标上添加点击事件
- javascript - 如何将 HTML 转换为字符串以在 JavaScript 中生成 PDF?
- r - 设置闪亮(开源版)会话超时
- tsql - 忽略坏记录,仍然更新存储过程中的所有好记录。记录错误
- java - Android复选框选中了一个变量
- php - 如果在 eloquent(如软删除 LARAVEL)中列值为零,则默认排除某些行
- sumologic - 查找具有相同跟踪 id 的所有日志,但仅针对失败的操作
- background - 如何在 Squarespace Henson 模板上仅更改一页上的背景颜色?