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
相关产品推荐
相关产品推荐

