解决:com.alibaba.fastjson.JSONException: parse number key errorpos 3, json

匿名 (未验证) 提交于 2019-12-03 00:37:01


在解析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()

的第二个参数是转换后的类型;正确的使用方法应该是这样:

当然,也可以根据自己要实现的功能自由选择;

阿里的jar包还是很厉害的,折腾了一天,原来是这么低级的错误;很尴尬;

但是如果换成String:

继续报错:

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)


问题解决;

所以,这个应该怎么改呢?这个解决方案肯定不合理,数据多了改死你;

这不会连这个都没法应付吧,健壮性也太差了;






标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!