Contents

GSON保存文件

1. 概述

Gson 是一个 Java 库,它允许我们将 Java 对象转换为 JSON 表示。我们也可以反过来使用它,将 JSON 字符串转换为等效的 Java 对象。

在这个快速教程中,我们将了解如何将各种 Java 数据类型保存为文件中的 JSON。

2. Maven依赖

首先,我们需要在pom.xml中添加 Gson 依赖。这在Maven Central 中可用:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

3. 将数据保存到 JSON 文件

我们将使用 Gson 类中的toJson(Object src, Appendable writer) 方法将 Java 数据类型转换为 JSON 并将其存储在文件中。Gson()构造函数使用默认配置创建一个Gson对象

Gson gson = new Gson();

现在,我们可以调用toJson () 来转换和存储 Java 对象。

让我们探讨一些 Java 中不同数据类型的示例。

3.1. 原型

使用 GSON 将原型保存到 JSON 文件非常简单:

gson.toJson(123.45, new FileWriter(filePath));

这里,filePath表示文件的位置。文件输出将只包含原始值:

123.45

3.2. 自定义对象

同样,我们可以将对象存储为 JSON。

首先,我们将创建一个简单的User类:

public class User {
    private int id;
    private String name;
    private transient String nationality;
    public User(int id, String name, String nationality) {
        this.id = id;
        this.name = name;
        this.nationality = nationality;
    }
    
    public User(int id, String name) {
        this(id, name, null);
    }
}

现在,我们将User对象存储为 JSON:

User user = new User(1, "Tom Smith", "American");
gson.toJson(user, new FileWriter(filePath));

文件输出将是:

{"id":1,"name":"Tom"}

如果一个字段被标记为transient,它默认被忽略并且不包含在 JSON 序列化或反序列化中。因此,JSON 输出中不存在nationality字段。

同样默认情况下,Gson 在序列化期间省略空字段。所以如果我们考虑这个例子:

gson.toJson(new User(1, null, "Unknown"), new FileWriter(filePath));

文件输出将是:

{"id":1}

稍后我们将看到如何在序列化中包含空字段。

3.3. 集合

我们可以用类似的方式存储对象集合:

User[] users = new User[] { new User(1, "Mike"), new User(2, "Tom") };
gson.toJson(users, new FileWriter(filePath));

在这种情况下,文件输出将是一个User对象数组:

[{"id":1,"name":"Mike"},{"id":2,"name":"Tom"}]

4. 使用GsonBuilder

为了调整默认的 Gson 配置设置,我们可以使用GsonBuilder 类。

该类遵循构建器模式,通常通过首先调用各种配置方法来设置所需的选项,最后调用 *create()*方法来使用它:

Gson gson = new GsonBuilder()
  .setPrettyPrinting()
  .create();

在这里,我们设置了默认设置为 false的漂亮打印选项。同样,要在序列化中包含空值,我们可以调用 serializeNulls()此处 列出了可用的选项。