关于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中的Unsafe工具类使用详解

    Java中的Unsafe工具类使用详解

    这篇文章主要介绍了Java中的Unsafe工具类使用详解,Unsafe是jdk提供的一个直接访问操作系统资源的工具类(底层c++实现),它可以直接分配内存,内存复制,copy,提供cpu级别的CAS乐观锁等操作,需要的朋友可以参考下
    2023-12-12
  • Spring Cloud整合XXL-Job的示例代码

    Spring Cloud整合XXL-Job的示例代码

    这篇文章主要介绍了springcloud整合xxl-job的示例代码,主要分为四个过程,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 深入了解Java对象的克隆

    深入了解Java对象的克隆

    这篇文章主要介绍了Java对象的克隆的相关资料,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-08-08
  • Mybatis使用update更新值为null时不生效问题解决

    Mybatis使用update更新值为null时不生效问题解决

    这篇文章主要介绍了Mybatis使用update更新值为null时不生效问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • SpringMvc之HandlerMapping详解

    SpringMvc之HandlerMapping详解

    这篇文章主要介绍了SpringMvc之HandlerMapping详解,Handler可以理解为具体干活的,也就是我们的业务处理逻辑,Handler最终是要通过url 来访问到,这样url 与Handler之间就有一个映射关系了,需要的朋友可以参考下
    2023-08-08
  • java写卷积神经网络(CupCnn简介)

    java写卷积神经网络(CupCnn简介)

    这篇文章主要介绍了java写卷积神经网络(CupCnn简介),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java I/O流实例之简历替换

    Java I/O流实例之简历替换

    流是一种抽象概念,它代表了数据的无结构化传递。。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出
    2021-09-09
  • 利用javaFX实现移动一个小球的示例代码

    利用javaFX实现移动一个小球的示例代码

    这篇文章主要介绍了利用javaFX实现移动一个小球的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Flowable历史查询实例分析

    Flowable历史查询实例分析

    这篇文章主要介绍了Flowable历史查询实例分析,历史是记录流程执行过程中发生的事情,并将其永久存储的组件,与运行时数据不同,历史数据在流程实例完成以后仍保存在数据库中,下面我们来深入了解
    2023-10-10
  • java中BigDecimal类型比较大小和绝对值计算方式

    java中BigDecimal类型比较大小和绝对值计算方式

    这篇文章主要介绍了java中BigDecimal类型比较大小和绝对值计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论