除了FastJson,你还有选择: Gson简易指南
前言
这个周末被几个技术博主的同一篇公众号文章 本文所涉及所有代码片段均在下面仓库中,感兴趣的小伙伴欢迎参考学习: https://github.com/wrcj12138aaa/gson-actions 版本支持: 在正式介绍 Gson 之前,我们可以先从官方的wiki看下 Gson 的描述,了解它是什么? 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 是用于将 Java 对象与 JSON格式字符串数据相互转换的 Java 库。它起初在Google 内部广泛使用在 Android 平台 和 Java 服务端上。2008 年开源之后,成为了谷歌又一个被广泛使用的开源框架,截止目前(2019.09.08) 在GitHub 上已有1W6 多星,相同作用的类库还有 Spring Framework 中集成的 Jackson,以及阿里开源的 fastjson等。 在特性方面,Gson 提供简易的API 我们通常将对象与JSON字符串间的转换称之为序列化和反序列化(Serialization/Deserialization)。将 对象转化成 JSON字符串的过程称为序列化,将JSON 字符串转化成对象的过程称为反序列化。 使用 Gson 框架进行序列化与反序列操作,都离不开 Gson 对象的创建主要有两种方式: 通常情况下,上面两种方式创建的 Gson 对象在进行序列化与反序列操作时行为都是一样的,但是第二种方式构建 Gson 对象时,允许进行额外的行为定制,比如格式化 JSON 字符串的输出内容,是否序列化 null 值等等。 我们可以通过下面的例子来看下通过上述两种方式序列化 Java 对象的不同效果: 运行该测试用例,在控制台可以看到如下日志输出: 从结果可以看出,默认的 Gson 对象行为序列化对象时会将 除了上述将自定义类的对象转换成 JSON 的方式之外,还可以使用 Gson 框架提供的 JsonObject 构建普通对象,然后使用
Gson 简介
fromJson/toJson
来实现 Java 与 JSON 之间的转换,并且能生成紧凑,可读的 JSON 字符串输出,还支持复杂对象转换和丰富的自定义表示,足以满足在日常开发中我们绝大部分的 JSON 数据处理需求。Gson 基本使用
com.google.gson.Gson
对象,它也是 Gson 框架的关键对象,提供的公共 API 具备了多种序列化和反序列方式。
Gson gson = new Gson()
Gson gson = new GsonBuilder().create()
Java 序列化
简单对象的序列化
public class ResultTest { @Test void test_serialization() { Gson gson = new Gson(); Result result = new Result(200, "成功", null); String json = gson.toJson(result); System.out.println("json is " + json); Gson buildedGson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); String buildedJson = buildedGson.toJson(result); System.out.println("buildedJson is " + buildedJson); } class Result { private int code; private String message; private Object data; public Result(int code, String message, Object data) { this.code = code; this.message = message; this.data = data; } } }
null
值的字段忽略,而 com.google.gson.GsonBuilder#serializeNulls
方法将允许 Gson 对象序列化 null
字段;并且正常序列化后的 JSON 字符串是紧凑格式,节省字符串内存,使用 com.google.gson.GsonBuilder#setPrettyPrinting
方法之后最终输出的 JSON 字符串是更易读的格式。当然除了这两个方法,GsonBuilder 还提供了许多定制序列化和反序列化行为的API,我们将后面的内容进一步讲解。JosnObject 生成 JSON
toJson
方法生成 JSON 字符串,在原测试类中补充下方测试类,并运行查看效果如下@Test void