当在复杂的JSON数组和散列中搜索项时,比如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
是否有某种查询语言,我可以用来在[0]中找到一个项目。id = 3的对象?
当在复杂的JSON数组和散列中搜索项时,比如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
是否有某种查询语言,我可以用来在[0]中找到一个项目。id = 3的对象?
当前回答
为了增加更多的选择,还有XPath。XPath 3.1处理JSON和XML。在XPath 3.1中,您需要的查询是?0?Objects?*[?id = 3)
其他回答
ObjectPath是一种类似于XPath或JSONPath的查询语言,但由于嵌入了算术计算、比较机制和内置函数,它的功能要强大得多。 请看语法:
商店里所有的鞋子都是红色的,价格在50美元以下
美元. .鞋子。*[颜色为“红色”,价格< 50]
XQuery可用于查询JSON,前提是处理器提供JSON支持。这是一个简单的例子,如何使用BaseX来查找“id”= 1的对象:
json:parse('[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [ "etc." ] }
]}
]')//value[.//id = 1]
我认为JSONQuery是JSONPath的超集,因此在dojo中取代了JSONPath。还有RQL。
来自Dojo文档:
JSONQuery是JSONPath的扩展版本,具有其他特性 为安全性、易用性和全面的数据查询集 工具包括过滤,递归搜索,排序,映射,范围 选择,以及具有通配符字符串比较的灵活表达式 以及各种运算符。
JSONselect对这个问题有另一种观点(类似CSS选择器,而不是XPath),并有一个JavaScript实现。
Jsel很棒,它基于真正的XPath引擎。它允许您创建XPath表达式来查找任何类型的JavaScript数据,而不仅仅是对象(字符串)。
您可以创建自定义模式和映射,从而完全控制XPath引擎如何处理数据。模式是一种定义如何在数据中定义元素、子元素、属性和节点值的方法。然后你可以创建自己的表达式来适应。
假设你有一个名为data的变量,其中包含来自问题的JSON,你可以使用jsel写:
jsel(data).select("//*[@id=3]")
这将返回id属性为3的任何节点。属性是对象内的任何基本元素(字符串、数字、日期、正则表达式)值。
尝试使用JSPath
JSPath是一种特定于领域的语言(DSL),它使您能够在JSON文档中导航和查找数据。使用JSPath,您可以选择JSON项,以便检索其中包含的数据。
JSON的JSPath就像XML的XPath。
它针对Node.js和现代浏览器进行了大量优化。