fastjson icon indicating copy to clipboard operation
fastjson copied to clipboard

FastJson 1.2.7 String无法转换为JSONObject

Open veione opened this issue 5 years ago • 2 comments

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

veione avatar Apr 15 '19 08:04 veione

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

wenshao avatar Apr 15 '19 09:04 wenshao

报错如下: 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

Omega-Ariston avatar Aug 14 '19 08:08 Omega-Ariston