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

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

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

Java 绑定