首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用jsonpath_ng检查数组中的元素时,JsonPathParseError失败

使用jsonpath_ng检查数组中的元素时,JsonPathParseError失败
EN

Stack Overflow用户
提问于 2021-12-20 10:21:06
回答 1查看 282关注 0票数 0

我正在尝试过滤JSON数据的元素,这些元素包含在一个数组中的特定值,其中包含了jsonpath_ng中的Python。数据看上去像是

代码语言:javascript
复制
[
  {
    "id": "a",
    "test": [
      "a1",
      "a2"
    ]
  },
  {
    "id": "b",
    "test": [
      "a1",
      "a3"
    ]
  }
]

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

代码语言:javascript
复制
[
  {
    "id": "a",
    "test": [
      "a1",
      "a2"
    ]
  }
]

不幸的是,用jsonpath_ng尝试这个结果会导致一个错误.

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-20 13:04:07

代码语言:javascript
复制
jpexpr = parse('$[?(@..test[?(@ == "a2")].`len` > 0)]')

为我做了这份工作..。

代码语言:javascript
复制
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)

结果是

代码语言:javascript
复制
{'id': 'a', 'test': ['a1', 'a2']}

和我想要的完全一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70420351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档