使用 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']}

正是我想要的。