# 一.基本介绍

# 1.什么是 gson?

Gson 是 Google 提供的一个用于 Java 编程语言的 JSON 序列化和反序列化库。它可以将 Java 对象转换为 JSON 格式的字符串,也可以将 JSON 格式的字符串转换为 Java 对象。Gson 提供了灵活性和易用性,因此它在处理 JSON 数据时非常受欢迎。

# 2.gson 优点?

以下是 Gson 的一些主要特性和用途:

  1. 对象序列化和反序列化: Gson 可以将 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象。这使得在前端和后端之间传递数据时变得非常方便。
  2. 支持复杂对象: Gson 能够处理复杂的 Java 对象,包括嵌套对象和集合。它会自动处理对象之间的关系,将它们转换为相应的 JSON 格式。
  3. 自定义序列化和反序列化: Gson 允许开发人员自定义对象的序列化和反序列化过程,以满足特定需求。这通过实现 JsonSerializerJsonDeserializer 接口来实现。
  4. 与 Android 兼容: Gson 适用于 Android 平台,因此它在 Android 开发中也经常被使用。
  5. 性能: Gson 旨在提供高性能的 JSON 处理。它采用了一些优化策略,以确保在处理大量数据时保持高效率。
  6. 开源: Gson 是一个开源项目,可以在 GitHub 上找到其源代码。这意味着开发人员可以查看、修改和贡献代码。

# 3.引入依赖

<dependencies>
    <!-- Other dependencies -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.9</version> <!-- Replace with the latest version -->
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8

# 二.简单实用

# 1.使用示例

以下是一个简单的使用 Gson 进行序列化和反序列化的示例:

import com.google.gson.Gson;

public class Example {
    public static void main(String[] args) {
        // 创建一个 Java 对象
        Person person = new Person("John", 25);

        // 使用 Gson 将对象转换为 JSON 字符串
        Gson gson = new Gson();
        String jsonString = gson.toJson(person);
        System.out.println("JSON String: " + jsonString);

        // 使用 Gson 将 JSON 字符串转换为对象
        Person newPerson = gson.fromJson(jsonString, Person.class);
        System.out.println("Deserialized Person: " + newPerson);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.实体类



class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在这个示例中,Person 类的对象被序列化为 JSON 字符串,然后又被反序列化回一个新的 Person 对象。

# 三.注意事项

# 1.处理空值

处理空值: Gson 默认情况下会将 Java 对象中的 null 值序列化为 JSON 字符串中的 null,并在反序列化时将 JSON 字符串中的 null 转换为 Java 对象的 null。确保你的对象在需要时能够处理 null 值。

# 2.处理异常

处理异常: 在进行反序列化时,要考虑可能出现的异常,如 JSON 字符串与目标对象不匹配、JSON 字符串格式错误等。使用 try-catch 块捕获 JsonSyntaxException 异常或其他可能的异常,并适当处理它们。

# 3.自定义序列化

自定义序列化和反序列化: 如果你的对象包含复杂的结构或需要特殊处理,可以实现 JsonSerializerJsonDeserializer 接口,以提供自定义的序列化和反序列化逻辑。

# 4.日期格式

日期格式: Gson 默认使用 ISO 8601 格式来处理日期。如果你的日期格式不符合默认规范,你可能需要设置自定义的日期格式,例如使用 setDateFormat 方法。

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create();
1

需要指定时间格式,在不同的服务器上时间格式不一样

Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy, h:mm:ss a").create();
String userVOPageStr = stringRedisTemplate.opsForValue().get(key);
            return gson.fromJson(userVOPageStr, new TypeToken<Page<UserVO>>() {
            }.getType());
1
2
3
4

# 5.字段访问权限

字段访问权限: Gson 默认情况下只处理公共字段和 getter 方法。确保你的对象具有适当的字段访问权限(公共或提供 getter 方法),以便 Gson 能够访问和处理它们。

# 6.循环引用

循环引用: Gson 默认情况下不处理循环引用。如果你的对象图包含循环引用,你可能需要使用 @Expose 注解来标记不想被序列化的字段,并使用 @SerializedName 来处理字段名称。

class Person {
    @Expose(serialize = false, deserialize = false)
    private Person friend;
}
1
2
3
4

# 7.性能优化

性能优化: 对于大型数据集,考虑使用 JsonReaderJsonWriter 直接进行流式处理,以避免在内存中保留整个 JSON 树。这可以提高性能并减少内存占用。

# 8.版本控制

版本控制: 当你的对象模型发生变化时,要注意版本控制,以确保向后和向前兼容性。可以使用 @Since@Until 注解来指定字段的版本信息。

class Person {
    @Since(1.0)
    private String name;
}
1
2
3
4

了解 Gson 的功能和一些高级配置选项,并根据你的具体需求进行配置,可以帮助你更有效地使用该库。官方文档和源代码也是很好的参考资源。

上次更新: 10/29/2024, 10:27:50 AM