Json 路径 - 列表列表中的过滤器
Json Path - Filter on List of List
我有一个 JSON 这样的:
{
"DATA": [
{
"docName": "xyz",
"result": [
{
"attribute": "attr1",
"value": true
},
{
"attribute": "attr2",
"value": true
}
]
},
{
"docName": "abc",
"result": [
{
"attribute": "attr1",
"value": false
},
{
"attribute": "attr2",
"value": true
}
]
}]
}
我的用例是查找 attr1 = true
对应的所有文档名称
我尝试了几个过滤器表达式,但无法获取文档名称。我试过这样的事情:
$.DATA[?(@.result[0].attribute=='attr1' && @.result[0].value == true)].docName
我得到了 docNames,但我不能依赖列表的第一个元素。我需要验证 attr1 是否存在于列表中的任何位置,值为 true.
如有任何帮助,我们将不胜感激。
经过一些编码,然后弄清楚为什么这不起作用,我确切地发现,目前无法使用 jsonpath 从过滤子节点获取 parent 元素(嵌套 json)。 Open Issue Link
否则这可能有效,
$.DATA[?(@.result[?(@.attribute=="attr1" && @.value==true)])].docName
jq 与 JSONpath 非常相似,因此 jq 解决方案可能会有所帮助。至少,它非常简单:
# find all the docNames for which the attr1 == true
.DATA[]
| select( any(.result[]; .attribute == "attr1" and .value == true) )
| .docName
Java 绑定
- https://github.com/eiiches/jackson-jq
- https://github.com/arakelian/java-jq(可从 Maven Central 获得)
- Java 本机访问包装器 https://github.com/bskaggs/jjq。支持的平台只有 Linux。
我有一个 JSON 这样的:
{
"DATA": [
{
"docName": "xyz",
"result": [
{
"attribute": "attr1",
"value": true
},
{
"attribute": "attr2",
"value": true
}
]
},
{
"docName": "abc",
"result": [
{
"attribute": "attr1",
"value": false
},
{
"attribute": "attr2",
"value": true
}
]
}]
}
我的用例是查找 attr1 = true
我尝试了几个过滤器表达式,但无法获取文档名称。我试过这样的事情:
$.DATA[?(@.result[0].attribute=='attr1' && @.result[0].value == true)].docName
我得到了 docNames,但我不能依赖列表的第一个元素。我需要验证 attr1 是否存在于列表中的任何位置,值为 true.
如有任何帮助,我们将不胜感激。
经过一些编码,然后弄清楚为什么这不起作用,我确切地发现,目前无法使用 jsonpath 从过滤子节点获取 parent 元素(嵌套 json)。 Open Issue Link
否则这可能有效,
$.DATA[?(@.result[?(@.attribute=="attr1" && @.value==true)])].docName
jq 与 JSONpath 非常相似,因此 jq 解决方案可能会有所帮助。至少,它非常简单:
# find all the docNames for which the attr1 == true
.DATA[]
| select( any(.result[]; .attribute == "attr1" and .value == true) )
| .docName
Java 绑定
- https://github.com/eiiches/jackson-jq
- https://github.com/arakelian/java-jq(可从 Maven Central 获得)
- Java 本机访问包装器 https://github.com/bskaggs/jjq。支持的平台只有 Linux。