Jsonpath 以子字段条件获取父字段信息
Jsonpath to grab parent field info with condition on child field
对于给定的表达式,我们可以使用 jsonpath 来 select 值,对于以下示例和问题:
{
"items": [
{
"id": 1,
"name": "item1",
"album": {
"name": "Summer Trip",
"meta": [
{
"name": "CreatedBy",
"value": "Karen"
},
{
"name": "Address",
"value": "San Jose, CA"
}
]
}
},
{
"id": 2,
"name": "item2",
"album": {
"name": "Winter Trip",
"meta": [
{
"name": "CreatedBy",
"value": "Lola"
},
{
"name": "Address",
"value": "Seattle, WA"
}
]
}
}
]
}
我想过滤掉其专辑元条件为 name == "CreatedBy" and value == "Karen"
和 return 项目 ID 和名称 的项目。例如:
{
items: [
{
"id": 1,
"name": "item1"
}
]
}
通过查看 jsonpath 的工作原理,似乎一旦深入嵌套 JSON 节点,它就无法捕获父节点值,例如,我可以捕获像
这样的节点值
$..meta[?(@.name == 'CreatedBy' && @.value == "Karen")]
其中 return 使用 meta 中的对象而不是其父节点 items.
[
{
"name": "CreatedBy",
"value": "Karen"
}
]
是否可以使用 jsonpath 来实现我正在寻找的东西?
如果您正在使用 Jayway JSONPath,则可以使用过滤运算符。
contains
过滤运算符
$.items[?(@.album.meta[?(@.name=='CreatedBy')].value contains 'Karen')]['id','name']
in
过滤运算符
$.items[?('Karen' in @.album.meta[?(@.name=='CreatedBy')].value)]['id','name']
固定索引位置
$.items[*][?(@.album.meta[0].name=="CreatedBy" && @.album.meta[0].value=="Karen")]['id','name']
在线测试工具:Jayway JsonPath Evaluator
对于给定的表达式,我们可以使用 jsonpath 来 select 值,对于以下示例和问题:
{
"items": [
{
"id": 1,
"name": "item1",
"album": {
"name": "Summer Trip",
"meta": [
{
"name": "CreatedBy",
"value": "Karen"
},
{
"name": "Address",
"value": "San Jose, CA"
}
]
}
},
{
"id": 2,
"name": "item2",
"album": {
"name": "Winter Trip",
"meta": [
{
"name": "CreatedBy",
"value": "Lola"
},
{
"name": "Address",
"value": "Seattle, WA"
}
]
}
}
]
}
我想过滤掉其专辑元条件为 name == "CreatedBy" and value == "Karen"
和 return 项目 ID 和名称 的项目。例如:
{
items: [
{
"id": 1,
"name": "item1"
}
]
}
通过查看 jsonpath 的工作原理,似乎一旦深入嵌套 JSON 节点,它就无法捕获父节点值,例如,我可以捕获像
这样的节点值$..meta[?(@.name == 'CreatedBy' && @.value == "Karen")]
其中 return 使用 meta 中的对象而不是其父节点 items.
[
{
"name": "CreatedBy",
"value": "Karen"
}
]
是否可以使用 jsonpath 来实现我正在寻找的东西?
如果您正在使用 Jayway JSONPath,则可以使用过滤运算符。
contains
过滤运算符
$.items[?(@.album.meta[?(@.name=='CreatedBy')].value contains 'Karen')]['id','name']
in
过滤运算符
$.items[?('Karen' in @.album.meta[?(@.name=='CreatedBy')].value)]['id','name']
固定索引位置
$.items[*][?(@.album.meta[0].name=="CreatedBy" && @.album.meta[0].value=="Karen")]['id','name']
在线测试工具:Jayway JsonPath Evaluator