我正在尝试用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']}
正是我想要的。