Newtonsoft JSON.NET 和 json 中的空格关键错误



采用以下有效 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)创建自己的扩展方法。

相关内容

  • 没有找到相关文章

最新更新