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


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

扫描二维码关注公众号,回复: 2091863 查看本文章

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));

问题解决;

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

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






猜你喜欢

转载自blog.csdn.net/select_bin/article/details/80839456