嗨,我正在寻找构造一个 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 的解决方案
任何帮助将不胜感激。
提前致谢
我认为 Jayway 不支持像您第一次尝试那样的嵌套查询。
请注意,它确实可以在我的游乐场上使用,https://json-everything.net/json-path。我的在 .Net 中实现了即将推出的 IETF 规范。
您也许可以在比较网站上找到另一个适合您的库。
使用 JsonPath-Plus 对原始数据集的查询:
items[*].children[?(@.id==201)]^^
将会产生
[
{ "id": 2, "children":
[
{ "id": 201, "name": "Child3" },
{ "id": 202, "name": "Child4" }
]
}
]
$.items[*].children[?(@.id==201)]^^ 产生相同的结果。
JSONPath 演示 站点允许您放入数据集、过滤器/查询并查看结果。 上面的查询是: