Json Path-过滤列表列表

时间:2018-08-01 17:32:12

标签: json jsonpath json-path-expression

我有这样的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

的docName。

我尝试了几个过滤器表达式,但无法获取文档名称。我尝试过这样的事情: $.DATA[?(@.result[0].attribute=='attr1' && @.result[0].value == true)].docName,我得到了docName,但是我不能依赖列表的第一个元素。我需要验证 attr1 是否在列表中的任何位置,且值为 true

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

经过一些编码然后弄清楚为什么它不起作用,我确切地发现的是,当前无法使用jsonpath从过滤子节点中获取父元素(嵌套json)。 Open Issue Link

否则,这可能行得通,

$.DATA[?(@.result[?(@.attribute=="attr1" && @.value==true)])].docName

答案 1 :(得分:1)

与JSONpath非常相似,因此也许jq解决方案会有所帮助。至少非常简单:

# find all the docNames for which the attr1 == true
.DATA[]
| select( any(.result[]; .attribute == "attr1" and .value == true) )
| .docName

Java绑定