在解析JSON的时候,除了
代码:
public static void testMe() {
Map map = new HashMap();
map.put("1", "2");
map.put("weq", "asd");
map.put("qw", "");
List list = new ArrayList();
list.add(map);
list.add(map);
list.add(null);
String str1 = String.valueOf(list);
System.out.println(String.valueOf(list));
List ss = JSON.parseObject(str1,List.class);
}
报错信息:
Exception in thread "main" com.alibaba.fastjson.JSONException: parse number key errorpos 3, json : [{1=2, weq=asd, qw=}, {1=2, weq=asd, qw=}, null]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:295)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335)
at com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer.deserialze(JavaObjectDeserializer.java:45)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:726)
at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:120)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:642)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:350)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:254)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:467)
at com.ai.rai.interests.management.controller.TestDemo1.testMe(TestDemo1.java:34)
at com.ai.rai.interests.management.controller.TestDemo1.main(TestDemo1.java:16)
代码:
List list = new ArrayList();
list.add("qw");
list.add("wq");
list.add("as");
list.add("xc");
String str1 = String.valueOf(list);
System.out.println(String.valueOf(list));
List ss = JSONArray.parseArray(str1,List.class);
报错:
Exception in thread "main" com.alibaba.fastjson.JSONException: exepct '[', but error, pos 2, json : [qw, wq, as, xc]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:672)
at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:120)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:726)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:662)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:657)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:514)
at com.ai.rai.interests.management.controller.TestDemo1.testMe(TestDemo1.java:36)
at com.ai.rai.interests.management.controller.TestDemo1.main(TestDemo1.java:16)
源码:
分析:
看了源码之后,我直接在我的JSON串里面外面加了一层“[]”
可以跑过,但是并没有转换成功
List ss = JSON.parseArray("[[1,2]]",List.class);
System.out.println(ss.get(0));
输出:
所以这个解析是失败的,明显不能实现我们需要的功能,我们再去看源码里面,其实方法
JSON.parseArray()
的第二个参数是转换后的类型;正确的使用方法应该是这样:
List ss = JSON.parseArray("[1,2]");
System.out.println(ss.get(0));
或者这样:
List ss = JSON.parseArray("[1,2]",Object.class);
System.out.println(ss.get(0));
当然,也可以根据自己要实现的功能自由选择;
阿里的jar包还是很厉害的,折腾了一天,原来是这么低级的错误;很尴尬;
但是如果换成String:
List ss = JSONArray.parseArray("[q,w]",Object.class);
System.out.println(ss.get(0));
继续报错:
Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, pos 2, json : [q,w]
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1394)
at com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer.deserialze(JavaObjectDeserializer.java:45)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:726)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:662)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:657)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:514)
at com.ai.rai.interests.management.controller.TestDemo1.testMe(TestDemo1.java:27)
at com.ai.rai.interests.management.controller.TestDemo1.main(TestDemo1.java:13)
这个时候:
List ss = JSONArray.parseArray("[\"q\",\"w\"]",Object.class);
System.out.println(ss.get(0));
问题解决;
所以,这个应该怎么改呢?这个解决方案肯定不合理,数据多了改死你;
这不会连这个都没法应付吧,健壮性也太差了;