[alibaba/fastjson]解析字符串数组错误

2025-11-13 934 views
3

测试版本:1.2.28,1.2.30 测试代码:

String str = "[\"年\",\"月\",\"日\"]";
Type[] types = new Type[]{String.class};
List<Object> strings = JSON.parseArray(str, types);

错误信息: Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:850) at com.alibaba.fastjson.JSON.parseArray(JSON.java:532) 采用:

String str = "[\"年\",\"月\",\"日\"]";
List<String> strings = JSON.parseArray(str, String.class);

无错误

回答

3

测试代码修改为: String str = "["年"]"; Type[] types = new Type[]{String.class}; List strings = JSON.parseArray(str, types); 也不会错误。

9

type 写成 Type[] types = new Type[]{String.class,String.class,String.class}; 不会错误 该Type 是通过反射获取List 的类型,只能获取到一个。如果还要根据实际数据在来重新创建的话,就没得必要了。

9
String str = "["年","月","日"]";
List strings = JSON.parseArray(str, String.class);

这种情况用这个不就行了么

9

List/Array里的多个对象不一定是一样的type, 所以,如果只传递一个type,可能会有歧义, 例如一个List/Array里有String,Integer,Fload三个对象,jsonString如下,就无法处理了: String str = "["年",1,0.5]";

0

你这个需求和设计不一致,你能改么?这个API是用来提升性能的,特别是rpc场景。

0

@wenshao 现在只有判断为泛型List 时,获取出类型强制转换成class,在使用 JSON.parseArray(json, class); 转换成对应类型数组了。 麻烦温少介绍下,这个在RPC下那个场景会使用到,后面可能会用到。