问题描述
JSONPath.extract解析报Exception
环境信息
- OS信息: [e.g.:Mac macOS Monterey]
- JDK信息: [e.g.:jdk-17.0.2]
- 版本信息:[e.g.:Fastjson2 2.0.15]
重现步骤
执行以下代码
String tmpJson = "{\"arr\": [{ \"key\": \"value1\" }, { \"key\": \"value2\" }]}";
String tmpPath = "$.arr[key='value1']";
Object tmpObj = JSONPath.extract(tmpJson, tmpPath);
System.out.println(tmpObj);
期待的正确结果
{"key": "value1"}
相关日志输出
以下是path="$.arr[key='value1']"的异常
Exception in thread "main" com.alibaba.fastjson2.JSONException: TODO : k
at com.alibaba.fastjson2.JSONPath$JSONPathParser.parseArrayAccess(JSONPath.java:6338)
at com.alibaba.fastjson2.JSONPath$JSONPathParser.parse(JSONPath.java:6160)
at com.alibaba.fastjson2.JSONPath.of(JSONPath.java:398)
at com.alibaba.fastjson.JSONPath.extract(JSONPath.java:30)
如果path="$.arr[?(key='value1')]"则输出以下异常
Exception in thread "main" com.alibaba.fastjson2.JSONException: jsonpath syntax error, offset 9, character k, line 1, column 10, fastjson-version 2.0.15 $.arr[?(key='value1')]
at com.alibaba.fastjson2.JSONPath$JSONPathParser.parseFilter(JSONPath.java:6839)
at com.alibaba.fastjson2.JSONPath$JSONPathParser.parseArrayAccess(JSONPath.java:6313)
at com.alibaba.fastjson2.JSONPath$JSONPathParser.parse(JSONPath.java:6160)
at com.alibaba.fastjson2.JSONPath.of(JSONPath.java:398)
at com.alibaba.fastjson.JSONPath.extract(JSONPath.java:30)
附加信息
测试过fastjson 1.2.69版本无此问题
3条答案
按热度按时间dgiusagp1#
可以这样写
cgvd09ve2#
不建议修改用法,新老版本不兼容,而且网上的文档又没有更新,这样显得特别bug。这个是官方的文档,并没有@的用法: https://alibaba.github.io/fastjson2/jsonpath_cn
7eumitmz3#
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.17-SNAPSHOT/
问题已修复,请用2.0.17-SNAPSHOT版本验证,2.0.17版本可能在这个周末发布