GSON基础用法-如何序列化/反序列化JSON
前言:因为个人需求,用到了JSON传输数据,但是我一直在用org.json的库,用法比较繁琐复杂,难以操作。偶然的一次吐槽中,@Nothing 解决了我的这个一个问题,那就是可以使用GSON来反序列化JSON为一个Java对象,操作简单且逻辑上更加简单。
什么是GSON? GITHUB项目地址:https://github.com/google/gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。 Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。 在使用这种对象转换之前,需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。 类里面只要有get和set方法,Gson完全可以实现复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
——来自知乎https://zhuanlan.zhihu.com/p/62841535
GitHub上官方的一段Readme文档:
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.
There are a few open-source projects that can convert Java objects to JSON. However, most of them require that you place Java annotations in your classes; something that you can not do if you do not have access to the source-code. Most also do not fully support the use of Java Generics. Gson considers both of these as very important design goals.
翻译过来就是:
Gson是一个Java库,可用于将Java对象转换为其JSON表示形式,还可用于将JSON字符串转换为等效的Java对象.Gson可与任意Java对象一起使用,包括您不存在的预先存在的对象。 有源代码。
有一些开源项目可以将Java对象转换为JSON,但是大多数项目都需要将Java批注放置在类中;如果无法访问源代码,则无法执行某些操作。 Gson认为这两者都是非常重要的设计目标。
什么?要我说人话?(逃)简单点就是:
可以很方便的将JSON数据反序列化到JavaBean对象中(这个JavaBean可以不是严格的JavaBean格式)
GSON自带函数参数讲解
Gson自带了fromJson()和toJson()这两个最常用的函数,那么他们的参数分别是什么呢?fromJson(String json,Class<?> clazz);
json顾名思义,就是需要操作的JSON字符串,那么clazz是什么呢?
clazz参数就是你所要序列化/反序列化的Java对象所属的JavaBean类,他是一个Class类型的类,每一个对象都是由Class类作为模板进行声明的,就好比巧克力工厂中的巧克力模板一样,虽然有各式各样口味的巧克力,但是模板只有一种的话,那么他所作出来的巧克力,只有味道上的差别,本质上还是一样的。我们的Gson也是这么想的,将JavaBean对象的Class传入之后,GSON会进行反射操作,获取JavaBean对象的所有属性,然后再通过自身算法,将JSON中的各种数据写入到这么一个JavaBean对象中,最后返回值就是你所传入进来的class类模板生成的一个对象。这也就是为什么GSON中的JavaBean中的成员变量名必须与JSON中的数据名保持一致,如:{"age":4}那么在JavaBean中接收这个数据的成员变量也必须名为age ,否则GSON无法识别进行序列化/反序列化。
最简单的JSON反序列化/序列化
如何使用呢?我们首先来举一个反序列化的例子:
假设一个JSON他是这样的:{"user":{"id":1,name":"VioletTec","age":3,"sex":"male"}}
从字面意思来理解,可以看到这是一个用户数据JSON,ID为1,昵称为VioetTec,年龄为3岁,性别为男
如何将这一串的JSON解析呢?GSON中提供了fromJson()和toJson()两个方法,fromJson()顾名思义就是将JSON反序列化,
那么我们可以新建一个JavaBean来作为这个JSON反序列化的模板(JavaBean无需严格按照格式进行创建)为了方便甚至可以直接将属性定义为public
1 | public class User{ |
然后直接新建一个GSON对象,调用其fromJson()方法。
1 | String json = "{\"user\":{\"id\":1,name\":\"VioletTec\",\"age\":3,\"sex\":\"male\"}}" |
这样就可以获取到反序列化到的对象了!