Json Path 使用子 Filter 提取数组元素

问题描述 投票:0回答:2

嗨,我正在寻找构造一个 jsonpath 表达式来查找与子项上的过滤器匹配的数组元素。

请在下面找到详细信息

杰森

{
  "items": [
    {
      "id": 1,
      "children": [
        {"id": 101, "name": "Child1"},
        {"id": 102, "name": "Child2"}
      ]
    },
    {
      "id": 2,
      "children": [
        {"id": 201, "name": "Child3"},
        {"id": 202, "name": "Child4"}
      ]
    }
  ]
}

预期结果

[
  {
    "id": 2,
    "children": [
      {"id": 201, "name": "Child3"},
      {"id": 202, "name": "Child4"}
    ]
  }
]

我想找到 id=201 的子元素的父元素

请找出我尝试过的表达式及其各自的结果。

**表达式1: **

$.items[?(@.children[?(@.id == 201)])]

结果:

[{"id":1,"children":[{"id":101,"name":"Child1"},{"id":102,"name":"Child2"}]},{"id":2,"children":[{"id":201,"name":"Child3"},{"id":202,"name":"Child4"}]}]
$.items[?(@.children[*].id == 201)]

结果:[]

注意:我正在使用 Jayway Library 并尝试了 chatgpt 的解决方案

任何帮助将不胜感激。

提前致谢

enter image description here enter image description here

arrays json jsonpath json-path-expression jayway
2个回答
0
投票

我认为 Jayway 不支持像您第一次尝试那样的嵌套查询。

请注意,它确实可以在我的游乐场上使用,https://json-everything.net/json-path。我的在 .Net 中实现了即将推出的 IETF 规范。

您也许可以在比较网站上找到另一个适合您的库。


0
投票

使用 JsonPath-Plus 对原始数据集的查询:

items[*].children[?(@.id==201)]^^

将会产生

[
  { "id": 2, "children": 
    [ 
      { "id": 201, "name": "Child3" },
      { "id": 202, "name": "Child4" } 
    ]
  }
]

$.items[*].children[?(@.id==201)]^^ 产生相同的结果。

JSONPath 演示 站点允许您放入数据集、过滤器/查询并查看结果。 上面的查询是:

  1. 获得所有物品
  2. 按 ID==201 过滤子项
  3. 使用“^”运算符获取父级。为了获得您想要的数据形状,需要进行两代。
© www.soinside.com 2019 - 2024. All rights reserved.