在复杂的 JSON 数组和散列中搜索项目时,例如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
是否有某种查询语言可以用来查找项目in [0].objects where id = 3
?
在复杂的 JSON 数组和散列中搜索项目时,例如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
是否有某种查询语言可以用来查找项目in [0].objects where id = 3
?
JMESPath是一个相当成熟的库,具有详细的规范并支持多种语言。
// Select a single item
people[1].firstName
// Select a slice of an array
people[0:5]
// Select all the first names
people[*].firstName
// Select all first names based on search term
people[?state=='VA'].firstName
// Count how many people are over 35
length(people[?age>`35`])
// Select only the name and age of people over 35
people[?age>`35`].{name: name, age: age}
// Join expressions together to sort and join elements into a string
people[?state == 'WA'].name | sort(@) | join(', ', @)
您可以在文档中使用更多现场示例。
JS 库被缩小了 19kb,所以可能比一些大,但考虑到广泛的功能,你可能会发现它是值得的。
还有一些其他选项可用于遍历/过滤 JSON 数据,以及一些语法示例可帮助您比较...
JS路径
.automobiles{.maker === "Honda" && .year > 2009}.model
json:select()(更多地受到 CSS 选择器的启发)
.automobiles .maker:val("Honda") .model
JSONPath(更多地受到 XPath 的启发)
$.automobiles[?(@.maker='Honda')].model
我认为 JSONQuery 是 JSONPath 的超集,因此在 dojo 中替换了它。然后还有RQL。
从 Dojo 文档:
JSONQuery 是 JSONPath 的扩展版本,具有安全性、易用性和一套全面的数据查询工具的附加功能,包括过滤、递归搜索、排序、映射、范围选择以及具有通配符字符串比较和各种运算符的灵活表达式。
JSONselect对这个问题有另一个观点(类似 CSS 选择器,而不是 XPath)并且有一个JavaScript 实现。
尝试使用JSPath
JSPath 是一种域特定语言 (DSL),使您能够在 JSON 文档中导航和查找数据。使用 JSPath,您可以选择 JSON 项以检索它们包含的数据。
JSON 的 JSPath 就像 XML 的 XPath。
它针对 Node.js 和现代浏览器进行了大量优化。