Jackson vs. Gson

2025年3月17日 | 阅读 12 分钟

JacksonGson 都是库/API。这两个库都处理 JSON 数据。它们也用于将 JSON 数据序列化和反序列化为 Java 对象。这两个库都是 Java 的完整库,提供 JSON 数据绑定支持,并且能够处理复杂的数据类型。这些库为 Java 泛型提供支持。

Jackson 和 Gson 都可以反序列化 JSON 数据,而无需更改实体类。为了在代码中使用 Jackson 和 Gson,我们需要在 pom.xml 文件中添加以下依赖项。

Gson 依赖

Jackson 依赖

现在,让我们了解如何使用 Jackson 和 Gson 库来序列化和反序列化 JSON 数据。

Gson 序列化

有两种方法可以将 Java 对象序列化为 JSON,即简单序列化(使用 toJson() 方法)和自定义序列化(使用自定义序列化程序)。

在简单序列化中,我们使用 Gson 库的 toJson() 方法来序列化 Java 对象。我们以以下方式使用 toJson() 方法

让我们举一个例子来理解如何使用它来序列化特定的 Java 对象。

GsonSerializationExample1.java

输出

Jackson Vs. Gson

但是,我们也可以使用自定义序列化程序序列化 Java 对象。通过使用自定义序列化程序,我们可以修改标准行为。我们可以处理 null 值,使用带有 html 的输出格式化程序,添加新输出或从输出中排除属性。

让我们为 College.java 创建序列化程序,稍后我们将使用它进行序列化。

CollegeGsonSerializer.java

现在,我们使用上述序列化程序序列化 College 类。

GsonSerializationExample2.java

输出

Jackson Vs. Gson

Jackson 序列化

就像 Gson 一样,我们也可以通过两种方式使用 Jackson 将 Java 对象序列化为 JSON,即简单序列化(使用 writeValueAsString() 方法)和自定义序列化(使用自定义序列化程序)。

在简单序列化中,我们使用 Jackson 库的 writeValueAsString() 方法来序列化 Java 对象。我们以以下方式使用 writeValueAsString() 方法

让我们举一个例子来理解如何使用它来序列化特定的 Java 对象。

JacksonSerializationExample1.java

输出

Jackson Vs. Gson

就像 Gson 自定义序列化一样,我们也可以通过简单地创建一个序列化程序来执行 Jackson 自定义序列化。让我们为 College.java 创建一个自定义序列化程序,稍后我们将使用 Jackson 进行序列化。

CollegeJacksonSerializer.java

现在,我们使用上述序列化程序序列化 College 类。

JacksonSerializationExample2.java

输出

Jackson Vs. Gson

Gson 反序列化

反序列化是将 JSON 字符串转换为 Java 对象的另一个重要概念。我们在两个实体类中都实现了 toString() 方法,以说明输出。我们还可以通过两种方式将 JSON 字符串反序列化为 Java 对象,即 简单反序列化自定义反序列化

让我们举一个 简单反序列化 的例子来理解如何将 JSON 字符串反序列化为 Java 对象。

GsonDeserializationExample1.java

输出

Jackson Vs. Gson

自定义反序列化 中,我们使用自定义反序列化程序。它允许我们修改标准反序列化程序行为。我们使用反序列化程序来反映 最后申请日期 的正确时区。

让我们再举一个 自定义反序列化 的例子,将 JSON 字符串反序列化为 Java 对象。

JobPositionGsonDeserializer.java

GsonDeserializationExample2.java

输出

Jackson Vs. Gson

Jackson 反序列化

就像 Gson 一样,我们可以通过两种方式反序列化 JSON 字符串,即 简单反序列化自定义反序列化。 让我们举一个例子,了解如何使用或不使用 Jackson 反序列化程序来反序列化 JSON 字符串。

JacksonDeserializationExample1.java

输出

Jackson Vs. Gson

JacksonDeserializationExample2.java

输出

Jackson Vs. Gson