关于JSON.toJSONString()和Gson.toJson()方法的比较

 更新时间:2024年11月11日 10:11:22   作者:有点野的程序猿  
本文介绍了两种将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类!!!

总结

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

相关文章

  • java如何创建普通二叉树

    java如何创建普通二叉树

    这篇文章主要介绍了java如何创建普通二叉树的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot整合Redisson的两种方式

    SpringBoot整合Redisson的两种方式

    这篇文章主要介绍了Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类,文中通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-04-04
  • Java解析pdf格式发票的代码实现

    Java解析pdf格式发票的代码实现

    为了减少用户工作量及误操作的可能性,需要实现用户上传PDF格式的发票,系统通过解析PDF文件获取发票内容,并直接将其写入表单,以下文章记录了功能实现的代码,需要的朋友可以参考下
    2024-08-08
  • spring boot整合kafka过程解析

    spring boot整合kafka过程解析

    这篇文章主要介绍了spring boot整合kafka过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 关于Android触摸事件分发的原理详析

    关于Android触摸事件分发的原理详析

    触摸事件分发机制一直以来都是Android中比较重要的一大块,自定义view,各种复杂的自定义手势交互都与触摸事件分发机制关系密,下面这篇文章主要给大家介绍了关于Android触摸事件分发原理的相关资料,需要的朋友可以参考下
    2022-01-01
  • Spring实现IoC的多种方式小结

    Spring实现IoC的多种方式小结

    本篇文章主要介绍了Spring实现IoC的多种方式小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 一起来学习Java IO的转化流

    一起来学习Java IO的转化流

    这篇文章主要为大家详细介绍了Java IO的转化流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • mybatis3.3+struts2.3.24+mysql5.1.22开发环境搭建图文教程

    mybatis3.3+struts2.3.24+mysql5.1.22开发环境搭建图文教程

    这篇文章主要为大家详细介绍了mybatis3.3+struts2.3.24+mysql5.1.22开发环境搭建图文教程,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Java中的Apache Commons Math使用详解

    Java中的Apache Commons Math使用详解

    Java中的Apache Commons Math是一个开源的数学库,它提供了许多常用的数学函数和算法,这个库对于需要处理大量数据的开发者来说非常有用,因为它可以大大简化代码并提高效率,本文给大家详解讲解Java中的Apache Commons Math知识,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • java  中Excel转shape file的实例详解

    java 中Excel转shape file的实例详解

    这篇文章主要介绍了java 中Excel转shape file的实例详解的相关资料,希望通过本文大家能实现这样的功能,需要的朋友可以参考下
    2017-09-09

最新评论