【问题标题】:Json Path - Filter on List of ListJson Path - 过滤列表列表
【发布时间】:2019-01-09 08:53:42
【问题描述】:

我有一个这样的 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 对应的所有 docNames

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

任何帮助将不胜感激。

【问题讨论】:

    标签: json jsonpath json-path-expression


    【解决方案1】:

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

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

    Java 绑定

    【讨论】:

    • 查看更新,但请注意,我对这些都没有个人经验。让我们知道您遇到的任何利弊。
    【解决方案2】:

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

    否则这可能会奏效,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多