使用 jsonpath_ng 检查数组中的元素失败并出现 JsonPathParseError
Checking for an element in an array with jsonpath_ng fails with JsonPathParseError
我正在尝试过滤我的 JSON 数据的元素,这些元素在 Python 中的 jsonpath_ng 数组中包含特定值。数据看起来像
[
{
"id": "a",
"test": [
"a1",
"a2"
]
},
{
"id": "b",
"test": [
"a1",
"a3"
]
}
]
使用查询 $[?(@.test contains "a2")]
或 $[?("a2" in @.test)]
测试 PyCharm 中的数据工作正常并且 returns 预期结果
[
{
"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")]')
导致错误 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
.
中存在限制,无论是通过搜索 Google 还是 SO,我都无法找到我是否做错了什么的答案
jsonpath_ng
中是否不支持此过滤器?如果是这种情况,有人有解决方法的好主意吗?
谢谢大家的帮助,
.凯
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']}
正是我想要的。
我正在尝试过滤我的 JSON 数据的元素,这些元素在 Python 中的 jsonpath_ng 数组中包含特定值。数据看起来像
[
{
"id": "a",
"test": [
"a1",
"a2"
]
},
{
"id": "b",
"test": [
"a1",
"a3"
]
}
]
使用查询 $[?(@.test contains "a2")]
或 $[?("a2" in @.test)]
测试 PyCharm 中的数据工作正常并且 returns 预期结果
[
{
"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")]')
导致错误 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
中是否不支持此过滤器?如果是这种情况,有人有解决方法的好主意吗?
谢谢大家的帮助, .凯
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']}
正是我想要的。