是否有XQuery/XPath的JSON等效功能?
JSONQuery是JSONPath的一个超集,因此在dojo中取代了它。还有一个名为RQL的工具。
根据Dojo文档:
JSONQuery是JSONPath的扩展版本,具有额外的功能,包括安全性、易用性和全面的数据查询工具,其中包括过滤、递归搜索、排序、映射、范围选择以及具有通配符字符串比较和各种运算符的灵活表达式。
JSONselect对这个问题有另一种看法(类似于CSS选择器,而不是XPath),并且有一个JavaScript实现。
Github中的JSONQuery链接似乎已经失效。JSONSelect现在也有一个JavaScript版本。
在这段内容中,出现了对于JSON的查询语言XQuery/XPath的等效性的问题。作者提到了JMESPath这个库,它是一个非常成熟并且支持多种语言的库,具有详细的规范。
JMESPath的语法示例包括:
- 选择单个项:`people[1].firstName`
- 选择数组的片段:`people[0:5]`
- 选择所有的名字:`people[*].firstName`
- 基于搜索条件选择所有的名字:`people[?state=='VA'].firstName`
- 统计年龄大于35的人数:`length(people[?age>35])`
- 选择年龄大于35的人的姓名和年龄:`people[?age>35].{name: name, age: age}`
- 将表达式连接在一起以对元素进行排序和连接成字符串:`people[?state == 'WA'].name | sort(@) | join(', ', @)`
除了JMESPath,还有一些其他选项来遍历/过滤JSON数据,并提供了一些语法示例进行比较:
- JSPath:`.automobiles{.maker === "Honda" && .year > 2009}.model`
- json:select():`.automobiles .maker:val("Honda") .model`
- JSONPath:`$.automobiles[?(@.maker='Honda')].model`
这些选项都提供了很好的总结和示例,同时提到了它们受到CSS选择器或XPath的启发。
,这段内容提到了JSON查询语言XQuery/XPath的等效性的问题,并介绍了JMESPath以及其他一些类似的选项来遍历/过滤JSON数据。这些选项都提供了丰富的功能,并受到了CSS选择器或XPath的启发。
有没有XQuery/XPath的JSON等价物?
是的,它被称为JSONPath:[JSONPath](http://goessner.net/articles/JsonPath/)
它还集成在DOJO中:[DOJO JSONPath](http://www.sitepen.com/blog/2008/03/17/jsonpath-support/)
Brian的答案建议在DOJO中使用jsonQuery模块而不是jsonPath模块:[jsonQuery](http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/)
有多可靠?我找不到Java或C#的版本,这对我们来说是个致命问题。
这个链接提供了Javascript和PHP的实现。如果你需要一个Java的实现,可以在这里找到:[Java JSONPath](http://code.google.com/p/json-path/)
我应该提到,JSONPath并不是基于XPath的正式语义。JSONiq可能是一个更好的选择。
我会使用jsel - [jsel](https://github.com/dragonworx/jsel) - 它使用了真正的XPath引擎,并且可高度自定义。它可以做到JSONPath所能做的,并且更多。
jsel是为JS而不是PHP设计的。
这很好用。顺便说一句,这个项目已经迁移到了GitHub,Mike可能需要将这个添加到答案中,因为人们一直在评论这个。
关于C#版本,截至2020年,它在Newtonsoft.Json中得到了支持,并且有一个开放的问题来支持System.Text.Json:[C# JSONPath](https://github.com/dotnet/runtime/issues/31068)
我很困惑。问题标记为Javascript,但Github链接是一个Java库。怎么回事??
是的,看起来Github链接是错误的。上面链接的是Javascript版本的JSONPath。我恢复到之前的编辑。