FastJson 1.2.7 String无法转换为JSONObject

h5qlskok  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(53)

报错如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject
原因是:1.2.7版本中里面移除了直接对 String类型的判断导致该错误的发生。

shyt4zoc

shyt4zoc1#

能提供完整堆栈信息么?同时请测试最新版本1.2.57是否解决问题

67up9zun

67up9zun2#

报错如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject
原因是:1.2.7版本中里面移除了直接对 String类型的判断导致该错误的发生。

JSONObject本身是用来存储键值对信息用,内部使用的数据结构是map,因此单个String值转化为JSONObject时会报错,类似地,单个的Number/boolean类型也会报错。

public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
    private static final long serialVersionUID = 1L;
    private static final int DEFAULT_INITIAL_CAPACITY = 16;
    private final Map<String, Object> map;

    public JSONObject() {
        this(16, false);
    }

    public JSONObject(Map<String, Object> map) {
        this.map = map;
    }

我在本地的测试如下:

String input = "\"hello world\"";
        // String input = "5";
        JSONObject jsonObject = JSON.parseObject( input );

解析报错:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:175)
	at fastjson.issue2300.Issue2383.main(Issue2383.java:20)

如果接收的对象是Object,则可以正常解析出此类特殊的JSON文本:

String input = "\"hello world\"";
        Object res = JSON.parse( input);
        System.out.println(res);

结果如下:

hello world

相关问题