You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jsonpath-ng解析$..[?(@.name=='is_literate')]表达式报错求助

解决jsonpath-ng库解析JSON时的JsonPathParserError问题

问题说明

JSONPath表达式$..[?(@.name=='is_literate')]在在线工具中可正常匹配目标数据,但在Python中通过jsonpath-ng.ext的parse()方法调用时,抛出JsonPathParserError: Parse error at 1:4 near token ? (?)错误。

原代码如下:

from jsonpath_ng.ext import parse
exp = "$..[?(@.name=='is_literate')]"
filter_query = parse(exp)
filtered_data = [match.value for match in filter_query.find(label_data)]
print(filtered_data)

期望输出:

[
  {
    "control": {
      "appearance": "quick"
    },
    "children": [
      {
        "name": "is_literate_1",
        "label": "साक्षर"
      },
      {
        "name": "is_literate_0",
        "label": "निरक्षर"
      }
    ],
    "name": "is_literate",
    "label": "${full_name}: साक्षर कि निरक्षर ?",
    "bind": {
      "required": "true"
    },
    "type": "select one"
  }
]

解决方案

jsonpath-ng库的语法要求更严格,$..后必须明确指定节点选择器(如*表示任意节点),不能直接跟过滤条件。修改表达式为$..*[?(@.name=='is_literate')]即可解决解析错误。

修正后的代码:

from jsonpath_ng.ext import parse
# 修正表达式,添加*选择器匹配任意节点
exp = "$..*[?(@.name=='is_literate')]"
filter_query = parse(exp)
filtered_data = [match.value for match in filter_query.find(label_data)]
print(filtered_data)

验证结果

运行修正后的代码,可正确匹配到目标数据,输出与预期一致。

内容的提问来源于stack exchange,提问作者Lalit mahato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:59:53