1

我有一个这样的 JSON:

{
"DATA": [
  {
    "docName": "xyz",
    "result": [
      {
        "attribute": "attr1",
        "value": true
      },
      {
        "attribute": "attr2",
        "value": true
      }
    ]
  },
  {
    "docName": "abc",
    "result": [
      {
        "attribute": "attr1",
        "value": false
      },
      {
        "attribute": "attr2",
        "value": true
      }
    ]
  }]
}

我的用例是找到所有 docNamesattr1 = true

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

任何帮助,将不胜感激。

4

2 回答 2

1

经过一些编码然后弄清楚为什么这不起作用,我确切地发现,目前它不可能使用 jsonpath从过滤子节点(嵌套 json)中获取父元素。打开问题链接

否则这可能会奏效,

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

于 2018-08-01T19:10:53.697 回答
1

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

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

Java 绑定

于 2018-08-02T02:02:46.930 回答