在具有jsonpath_ng的数组中检查元素失败,返回JsonPathParseError



我正在尝试用Python中的jsonpath_ng过滤JSON数据中包含特定值的元素。数据看起来像

[
{
"id": "a",
"test": [
"a1",
"a2"
]
},
{
"id": "b",
"test": [
"a1",
"a3"
]
}
]

使用查询$[?(@.test contains "a2")]$[?("a2" in @.test)]在PyCharm中测试数据效果良好,并返回预期结果

[
{
"id": "a",
"test": [
"a1",
"a2"
]
}
]

不幸的是,在Python中使用jsonpath_ng尝试此操作会导致错误。。。

from jsonpath_ng.ext import parse
a = [{"id": "a", "test": ["a1", "a2"]}, {"id": "b", "test": ["a1", "a3"]}]
jpexpr = parse('$[?(@.test contains "a2")]')

导致错误CCD_ 4。使用jpexpr = parse('$[?("a2" in @.test)]')显示类似的行为jsonpath_ng.exceptions.JsonPathParserError: Parse error at 1:9 near token in (ID)

无论是搜索谷歌还是SO,我都找不到一个答案,如果jsonpath_ng有限制,我是否做错了什么。

jsonpath_ng中是否不支持此筛选器?如果是这样的话,有人有一个很好的解决办法吗?

感谢大家的帮助,.kai

jpexpr = parse('$[?(@..test[?(@ == "a2")].`len` > 0)]')

为我做了这项工作…

from jsonpath_ng.ext import parse
a = [{"id": "a", "test": ["a1", "a2"]}, {"id": "b", "test": ["a1", "a3"]}]
jpexpr = parse('$[?(@..test[?(@ == "a2")].`len` > 0)]')
for i in jpexpr.find(a):
print(i.value)

导致

{'id': 'a', 'test': ['a1', 'a2']}

正是我想要的。

最新更新