使用
两个方法都是将Java对象转化为JSON字符串格式,不同点是JSON.toJSONString()是阿里的com.alibaba.fastjson包中的方法,Gson.toJson()是谷歌的com.google.gson包中的方法。
踩过的坑
嫌啰嗦的小伙伴可以直接看分析!!
代码是这样的
public class Person{
String name;
String father;
String mother;
}
public class Student extends Person{
String name;
Integer age;
}
两个实体类,一个Person类,一个Student类继承Person类,并且Student类中的name字段会覆盖Person类中的name字段。
当使用Student实体类的对象使用Gson.toJson()方法时,会报错,报错内容为:java.lang.IllegalArgumentException: class Student declares multiple JSON fields named name,示例的代码如下:
Student student = new Student();
student.setName("张三");
student.setAge(18);
Gson G = new Gson();
G.toJson(student);
上面的代码会报错,但是使用阿里的JSON类可以正常运行,如下:
Student student = new Student();
student.setName("张三");
student.setAge(18);
JSON.toJSONString(Student);
分析
具体的原因是因为Student继承了Person类,并覆盖了原有的name,在转为JSON字符串的过程中,谷歌的Gson.toJson()方法无法区分是Person中的name还是Student中的name,所以出现了上面提到的报错,但是阿里的JSON.toJSONString()方法会默认转换子类中的属性值,所以不会出现报错。
个人建议JSON相关的处理使用阿里的JSON类!!!