[alibaba/fastjson]JsonPath解析属性为大数字时异常

2025-11-25 195 views
4

当json 的属性名为数字并且数值过大时(超过integer.max_value),直接使用JsonPath表达式解析报错。 错误信息: java.lang.NumberFormatException: For input string: "1234567899999" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:495) at java.lang.Integer.parseInt(Integer.java:527)

测试例子: public static void main(String[] args) { //正常解析 String json1 = "{"articles":{"2147483647":{"XXX":"xiu"}}}"; String path1 = "$.articles.2147483647.XXX"; Object read = JSONPath.read(json1, path1);

        //报错
String json2 = "{\"articles\":{\"2147483648\":{\"XXX\":\"xiu\"}}}";
String path2 = "$.articles.2147483648.XXX";
Object read2 = JSONPath.read(json2, path2);

}

回答

4

根据json规范, .加上数字,会被当做数组下标,所以这里先尝试转int取下标,parseInt导致出错。

试了下网上的jsonpath工具,这里没有问题。http://jsonpath.com/

明天我来改改。

6

已fix,也添加了testcase: #1216

6

辛苦!

0

可以close掉了