采取以下有效的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密钥中的空格?
谢谢,
PT
答案 0 :(得分:3)
这不是错误。 JToken.Path
返回的路径位于JSONPath syntax。正如original JSONPath proposal:
JSONPath表达式可以使用 dot -notation
$.store.book[0].title
或括号 -notation
$['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
另见Querying JSON with SelectToken and escaped properties。
如果您仍希望路径中有额外的.
,则可以根据reference source创建自己的扩展方法JTokenExtensions.ExpandedPath(this JToken token)
。