关于JSON.toJSONString()和Gson.toJson()方法的比较
作者:有点野的程序猿
本文介绍了两种将Java对象转换为JSON字符串的方法:阿里的`JSON.toJSONString()`和谷歌的`Gson.toJson()`,通过一个示例,展示了当使用继承关系且子类覆盖父类字段时,`Gson`会报错,而`JSON`可以正常运行,作者建议在处理JSON相关操作时使用阿里的`JSON`类
使用
两个方法都是将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类!!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。