我有这样的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
,我得到了docName,但是我不能依赖列表的第一个元素。我需要验证 attr1 是否在列表中的任何位置,且值为 true 。
任何帮助将不胜感激。
答案 0 :(得分:1)
经过一些编码然后弄清楚为什么它不起作用,我确切地发现的是,当前无法使用jsonpath从过滤子节点中获取父元素(嵌套json)。 Open Issue Link
否则,这可能行得通,
$.DATA[?(@.result[?(@.attribute=="attr1" && @.value==true)])].docName
答案 1 :(得分:1)
jq与JSONpath非常相似,因此也许jq解决方案会有所帮助。至少非常简单:
# find all the docNames for which the attr1 == true
.DATA[]
| select( any(.result[]; .attribute == "attr1" and .value == true) )
| .docName