当在复杂的JSON数组和散列中搜索项时,比如:

[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [
            // etc.
        }]
    }
]

是否有某种查询语言,我可以用来在[0]中找到一个项目。id = 3的对象?


当前回答

索纳塔 https://jsonata.org/

它有一个操场,你可以下载图书馆

其他回答

ObjectPath是一种类似于XPath或JSONPath的查询语言,但由于嵌入了算术计算、比较机制和内置函数,它的功能要强大得多。 请看语法:

商店里所有的鞋子都是红色的,价格在50美元以下

美元. .鞋子。*[颜色为“红色”,价格< 50]

是的,它叫做JSONPath:

它还集成到DOJO中。

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数据的其他选项,以及一些语法示例,以帮助您进行比较…

JSPath .automobiles{。maker ===“本田”&& .year > 2009}.model json:select()(更多的灵感来自CSS选择器) .automobile .maker:val("Honda") .model JSONPath(更多地受XPath启发) 美元.automobiles [? (@.maker =“本田”)]得

@Naftule -使用" defy .js",可以用XPath表达式查询JSON结构。看看这个计算器,了解它是如何工作的:

http://www.defiantjs.com/#xpath_evaluator

与JSONPath不同,“defy .js”提供了对查询语法的全面支持——对JSON结构上的XPath。

defy .js的源代码可以在这里找到: https://github.com/hbi99/defiant.js

索纳塔 https://jsonata.org/

它有一个操场,你可以下载图书馆