java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JSON.toJSONString()和Gson.toJson()方法比较

关于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类!!!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文