当“条件”为 1 时,我需要一个“元素”的 JSON 路径
{
"customer": [
{
"Addresses": {
"addressDetails": {
"element": "one"
},
"Condition": {
"type": 1
}
}
},
{
"Addresses": [
{
"addressDetails": {
"element": "two"
},
"Condition": {
"type": 0
}
},
{
"addressDetails": {
"element": "three"
},
"Condition": {
"type": 1
}
}
]
}
]
}
正如您在示例中看到的:“地址”有时可以是包含多个详细信息的数组。我只需要获取“条件”等于 1 的“元素” - 因此从这个片段中,JSON 路径应该返回“一”和“三”。这可能吗?
我尝试了许多不同的方法来使用 [?(@.==)] 进行过滤,但它从未起作用 - 我只能从非数组对象或数组对象中获取元素,而不是同时从两者中获取元素。
您正在寻找的是递归下降运算符
..
。这将递归地搜索树。从这里开始,然后你就可以使用你的过滤器了[?...]
。
$..[?(@.Condition.type == 1)]
您可以在我的网站上进行测试:https://json-everything.net/json-path。
顺便说一句,使用新的 RFC 9535,您不需要括号:
$..[[email protected] == 1]
请注意,由于这是一个新规范,因此实现仍在赶上,因此请检查您正在使用的库。