当在复杂的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的对象?
当前回答
试试这个——https://github.com/satyapaul/jpath/blob/master/JSONDataReader.java
这是一个非常简单的实现,类似于xpath for xml。它的名称是jpath。
其他回答
索纳塔 https://jsonata.org/
它有一个操场,你可以下载图书馆
试试这个——https://github.com/satyapaul/jpath/blob/master/JSONDataReader.java
这是一个非常简单的实现,类似于xpath for xml。它的名称是jpath。
XQuery可用于查询JSON,前提是处理器提供JSON支持。这是一个简单的例子,如何使用BaseX来查找“id”= 1的对象:
json:parse('[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [ "etc." ] }
]}
]')//value[.//id = 1]
我知道OP用javascript标记了这个问题,但在我的情况下,我看起来完全一样,但从Java后端(与Camel)。
有趣的是,如果您使用的是像Camel这样的集成框架,jsonPath也由特定的Camel组件支持,从Camel 2.13开始。
例子来自上面的Camel文档:
from("queue:books.new")
.choice()
.when().jsonpath("$.store.book[?(@.price < 10)]")
.to("jms:queue:book.cheap")
.when().jsonpath("$.store.book[?(@.price < 30)]")
.to("jms:queue:book.average")
.otherwise()
.to("jms:queue:book.expensive")
使用起来很简单。
是否存在某种查询语言…
jq定义了一种与JSONPath非常相似的JSON查询语言——请参阅https://github.com/stedolan/jq/wiki/For-JSONPath-users
... 我可以用它在[0]中找到一个项目。id = 3的对象?
我假设这意味着:找到id == 3指定键下的所有JSON对象,无论对象可能在哪里。对应的jq查询是:
.[0].objects | .. | objects | select(.id==3)
其中“|”是管道操作符(如在命令shell管道中),而段“..| objects”对应于“无论对象可能在哪里”。
jq的基本原理在很大程度上是显而易见或直观的,或者至少相当简单,如果您熟悉命令-shell管道,那么其余的大部分内容都很容易掌握。jq常见问题解答中有指向教程之类内容的指针。
jq也类似于SQL,因为它支持CRUD操作,尽管jq处理器从不覆盖它的输入。jq还可以处理JSON实体的流。
在评估面向json的查询语言时,您可能希望考虑的另外两个标准是:
它是否支持正则表达式?(jq 1.5全面支持PCRE正则表达式) 它是图灵完备的吗?(是的)