是否有XQuery/XPath的JSON等效功能?

11 浏览
0 Comments

是否有XQuery/XPath的JSON等效功能?

在复杂的JSON数组和哈希中搜索项目时,例如:

[

{ "id": 1, "name": "One", "objects": [

{ "id": 1, "name": "Response 1", "objects": [

// 等等。

}]

}

]

是否有一种查询语言可以用来找到[0].objects where id = 3的项目?

0
0 Comments

JSONQuery是JSONPath的一个超集,因此在dojo中取代了它。还有一个名为RQL的工具。

根据Dojo文档:

JSONQuery是JSONPath的扩展版本,具有额外的功能,包括安全性、易用性和全面的数据查询工具,其中包括过滤、递归搜索、排序、映射、范围选择以及具有通配符字符串比较和各种运算符的灵活表达式。

JSONselect对这个问题有另一种看法(类似于CSS选择器,而不是XPath),并且有一个JavaScript实现

Github中的JSONQuery链接似乎已经失效。JSONSelect现在也有一个JavaScript版本。

0
0 Comments

在这段内容中,出现了对于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的启发。

0
0 Comments

有没有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。我恢复到之前的编辑。

0