fastjson
fastjson copied to clipboard
FastJson 1.2.7 String无法转换为JSONObject
报错如下: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 原因是:1.2.7版本中里面移除了直接对 String类型的判断导致该错误的发生。
能提供完整堆栈信息么?同时请测试最新版本1.2.57是否解决问题
报错如下: 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