专属目录
爪哇基础 之 使用 Gson 处理 JSON 序列化与反序列化
前言
对于后端开发人员
来说日常中经常要跟安卓
、iOS
还有前端
交互,而目前在数据交互中最常用的数据交互格式莫过于JSON
了,那么在Java开发
中也就自然而然的经常会遇到JSON的序列化与反序列化
,面对JSON序列化工具我们常用的有阿里的 Fastjson
、Spring MVC 内置的 Jackson
还有谷歌的Gson
,今天我们来说下 谷歌的Gson 是如何 JSON 序列化与反序列化的!
Gson 简介
Google Gson是一个简单的基于Java的库,用来在 Java对象 和 JSON数据 之间进行映射,可以将将Java对象序列化为JSON,反之亦然。它是由 Google 开发的开源库。
为何使用 Gson
-
标准化
- Gson是由Google管理的标准化库。 -
高效
- 它是Java标准库的可靠,快速和高效的扩展。 -
优化
- 库高度优化。 -
支持泛型
- 它为泛型提供广泛的支持。 -
支持复杂的内部类
- 它支持具有深层继承层次结构的复杂对象。
特点
Gson 的特点可以简单概括为面向对象
、简洁高效
、数据传递
和解析方便
下面来说下Gson 一些比较突出
的功能!
-
易于使用
- Gson API提供了一个高级外观,以简化常用的用例。 -
无需创建映射
- Gson API为大多数要序列化的对象提供默认映射。 -
性能
- Gson速度非常快,内存占用少。 它适用于大型对象图或系统。 -
清洁JSON
- Gson创建一个干净,紧凑的JSON结果,易于阅读。 -
无依赖关系
- 除了JDK之外,Gson库不需要任何其他库。 -
开源
- Gson库是开源的; 它是免费提供的。
看了这么多特点,不用 Gson 都感觉心里过不去
下面我们来说下 Gson的常用的方法,想要使用前肯定得先下载 Gson 得jar 包
下载
maven 方式
在 pom.xml
直接引入 Gson 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
jar 引入方式
直接复制以下链接
,下载 jar 包
,引入项目的 lib
目录下即可
https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar
前提
因为简介也说了,Gson 主要用来在 Java对象 和 JSON数据 之间进行映射,可以将将Java对象序列化为JSON,反之亦然
那首先肯定要创建一个 Java 实体类
实体类 Student.java
package com.gsontest.bean;
import lombok.Data;
/**
* @ClassName: Student
* @Description: (描述)
* @Author: WHT
* @Version: V1.0
* @Date: 2020/10/23 15:29
*/
@Data
public class Student {
private Integer id;
private Integer no;
private String name;
}
常用方法
toJson() 【序列化】
方法作用
把实体对象转换为 json
(序列化)
实例
package com.gsontest.test;
import com.google.gson.Gson;
import com.gsontest.bean.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName: GsonToJsonTest
* @Description: (描述)
* @Author: WHT
* @Version: V1.0
* @Date: 2020/10/23 15:38
*/
public class GsonToJsonTest {
public static void main(String[] args) {
//创建 Student 实体类
Student student = new Student(1001, "序列化", "男", 28);
//实例化 Gson
Gson gson = new Gson();
//把对象序列化为json
String str = gson.toJson(student);
//输出---序列化后的结果
System.out.println("序列化后的结果为:" + str);
//创建List集合
List<Student> studentList = new ArrayList<Student>();
studentList.add(student);
String strList = gson.toJson(studentList);
//输出---List集合序列化后的结果
System.out.println("List集合序列化后的结果为:" + strList);
//创建map 集合
Map<String, List<Student>> studentMap = new HashMap<String, List<Student>>();
studentMap.put("GsonMap", studentList);
String strMap= gson.toJson(studentMap);
//输出--Map集合序列化后的结果
System.out.println("Map集合序列化后的结果为:" + strMap);
}
}
运行结果
序列化后的结果为:{"no":1001,"name":"序列化","sex":"男","age":28}
List集合序列化后的结果为:[{"no":1001,"name":"序列化","sex":"男","age":28}]
Map集合序列化后的结果为:{"GsonMap":[{"no":1001,"name":"序列化","sex":"男","age":28}]}
fromJson() 【反序列化】
方法作用
1)把json转换为List对象
(反序列化)
/**
* 把json转换为List对象
* @return String
*/
public static String jsonToList() {
// 定义 json 字符串
String json = "[{\"no\":1001,\"name\":\"序列化\",\"sex\":\"男\",\"age\":28}]";
//实例化Gson
Gson gson = new Gson();
//把json序列化为List对象
List<Student> studentList = gson.fromJson(json, new TypeToken<List<Student>>() {
}.getType());
//输出---序列化后的结果
return "反序列化成List后的结果为:" + studentList.toString();
}
2)把json转换为Map对象
(反序列化)
/**
* 把json转换为List对象
* @return String
*/
public static String jsonToMap() {
//实例化Gson
Gson gson = new Gson();
//定义json
String jsonMap = "{\"GsonMap\":[{\"no\":1001,\"name\":\"序列化\",\"sex\":\"男\",\"age\":28}]}";
//把json序列化为Map对象
HashMap<String, List<Student>> studentMap = gson.fromJson(jsonMap, new TypeToken<HashMap<String, List<Student>>>() {
}.getType());
//输出--序列化后的结果
return "反序列化成Map后的结果为:" + studentMap;
}
3)把json转换为实体对象
(反序列化)
/**
* 把json转换为List对象
* @return String
*/
public static String jsonToBean() {
// 定义json
String json = "{\"no\":1001,\"name\":\"序列化\",\"sex\":\"男\",\"age\":28}";
//实例化Gson
Gson gson = new Gson();
//把json序列化为实体类(Test)对象
Student student = gson.fromJson(json, Student.class);
//输出---反序列化后的结果
return "反序列化成实体类后的结果为:" + student.toString();
}
注意
序列化
- 把
实体类
序列化为json
时,如果实体类某个属性的值为 null
,gson在序列化该对象是则默认过滤掉该属性,该属性不会参与序列化
。
反序列化
反序列化
时需注意json串的格式
-
如果是
数组
则最外层
用‘[ ]’
来包括 -
如果是
对象
或Map
则用‘{ }’
来包括 -
根据需要
反序列化的json格式
来选定需要反序列化用的方法gson.fromJson()
应该传递哪种参数
,反序列化成对象参数应该是这个对象的反射
(entity.Class),如果是List 或 Map
,参数则是泛型
。
总结
看到这,Java 中的JSON的序列化与反序列化就到此完结了,是不是非常nice,数据交互起来就更完美!快去试一试吧!别着急,还有更多的秘密等着你来探索!
分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!
微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!