爪哇基础 之 使用 Gson 处理 JSON 序列化与反序列化

爪哇基础 之 使用 Gson 处理 JSON 序列化与反序列化

前言

对于后端开发人员来说日常中经常要跟安卓iOS还有前端交互,而目前在数据交互中最常用的数据交互格式莫过于JSON了,那么在Java开发中也就自然而然的经常会遇到JSON的序列化与反序列化,面对JSON序列化工具我们常用的有阿里的 FastjsonSpring 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时,如果实体类某个属性的值为 nullgson在序列化该对象是则默认过滤掉该属性,该属性不会参与序列化

反序列化

反序列化时需注意json串的格式

  • 如果是数组最外层‘[ ]’来包括

  • 如果是对象Map则用‘{ }’来包括

  • 根据需要反序列化的json格式来选定需要反序列化用的方法gson.fromJson()应该传递哪种参数,反序列化成对象参数应该是这个对象的反射(entity.Class),如果是List 或 Map,参数则是泛型

总结

看到这,Java 中的JSON的序列化与反序列化就到此完结了,是不是非常nice,数据交互起来就更完美!快去试一试吧!别着急,还有更多的秘密等着你来探索!

在这里插入图片描述

分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!

微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值