我正在尝试过滤JSON数据的元素,这些元素包含在一个数组中的特定值,其中包含了jsonpath_ng中的Python。数据看上去像是
[
{
"id": "a",
"test": [
"a1",
"a2"
]
},
{
"id": "b",
"test": [
"a1",
"a3"
]
}
]使用查询PyCharm或$[?(@.test contains "a2")]或$[?("a2" in @.test)]测试数据运行良好,并返回预期的结果。
[
{
"id": "a",
"test": [
"a1",
"a2"
]
}
]不幸的是,用jsonpath_ng尝试这个结果会导致一个错误.
from jsonpath_ng.ext import parse
a = [{"id": "a", "test": ["a1", "a2"]}, {"id": "b", "test": ["a1", "a3"]}]
jpexpr = parse('$[?(@.test contains "a2")]')结果是一个错误jsonpath_ng.exceptions.JsonPathParserError: Parse error at 1:11 near token contains (ID)。使用jpexpr = parse('$[?("a2" in @.test)]')显示了类似的行为jsonpath_ng.exceptions.JsonPathParserError: Parse error at 1:9 near token in (ID)
无论是搜索谷歌还是谷歌,我都找不到答案,我是否做错了什么,如果有一个限制在jsonpath_ng。
在jsonpath_ng中不支持这个过滤器吗?如果是这样的话,有没有人有一个解决办法的好主意?
谢谢你们的帮助,.kai
发布于 2021-12-20 13:04:07
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']}和我想要的完全一样。
https://stackoverflow.com/questions/70420351
复制相似问题