采用以下有效 json:
{
"universe": {
"solar system": "sun"
}
}
下面是简单的 C# 代码:
using Newtonsoft.Json;
JToken x = JToken.Parse("{"universe": {"solar system": "sun"}}");
string s = x.First.First.First.Path;
此时s = "universe['solar system']"
但是我期待"universe.['solar system']"
(注意"宇宙"后面的".")。
如果 json 键没有空格("solar_system"),我会得到"universe.solar_system"
是正确的。
问题是:这是 json.net 中的错误,还是我需要做其他事情来支持 json 键中的空格?
谢谢
铂
一个错误。 JToken.Path
返回的路径旨在采用 JSONPath 语法。 正如最初的JSONPath提案中所解释的那样:
JSONPath 表达式可以使用点表示法
$.store.book[0].title
或括号表示
法
$['store']['book'][0]['title']
所以universe['solar system']
是完全有效的,如果你把它传递给SelectToken()
你会得到正确的值"sun"
返回:
JToken x = JToken.Parse("{"universe": {"solar system": "sun"}}");
string path = x.First.First.First.Path;
Console.WriteLine(path); // Prints universe['solar system']
var val = (string)x.SelectToken(path);
Console.WriteLine(val); // Prints "sun"
Debug.Assert(val == "sun"); // No assert
另请参阅使用选择令牌和转义属性查询 JSON。
如果您仍然希望在路径中使用额外的.
,则可以基于引用源JTokenExtensions.ExpandedPath(this JToken token)
创建自己的扩展方法。