Convert Java object to JSON

2025年3月29日 | 阅读 9 分钟

JSONJavaScript Object Notation 的缩写,它是一种非常轻量级的数据存储和传输格式。JSON 格式非常易于理解,因为它具有自描述性。JSON 主要用于在服务器和 Web 应用程序之间传输数据。在许多应用程序中,将 Java 对象转换为 JSON 以及反之亦然是一项常见任务,无论是用于 Web 服务、REST API 还是数据存储。在本节中,我们将探讨 Java 中可用于将 Java 对象转换为 JSON 的各种方法和库。

理解 JSON

JSON 是一种轻量级的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。它由用花括号 {} 包围的键值对组成,键和字符串值之间用冒号(:)分隔。数组用方括号 [] 表示,值可以是字符串、数字、对象、数组、布尔值或 null 等不同类型。

以 JSON 格式编写的员工详细信息如下所示:

Java 对象 是一个类的实例,或是一个独立的组件,具有用于使特定类型的数据有用的属性和方法。Java 对象具有状态、行为和身份。

以以下方式编写的员工的 Java 对象:

很多时候我们需要将 Java 对象转换为 JSON,以便我们能够轻松理解它们。要将 Java 对象转换为 JSON 对象,我们有两种方法或方式:

  1. 使用 GSON 库
  2. 使用 Jackson API
Convert Java object to JSON

让我们逐一了解它们。

使用 GSON 库

GSON 库在将 Java 对象转换为 JSON 中起着重要作用。GSON 库不仅将 Java 对象转换为 JSON,还用于将 JSON 字符串转换为其等效的 Java 对象。它提供了一个 GSON 类,可用于 JSON 序列化和反序列化。

将 Java 对象转换为 JSON 的步骤如下:

  1. 创建一个 Maven 项目。
  2. xml 文件中添加 GSON 依赖项。
  3. 创建要转换为 JSON 的纯旧 Java 对象 (POJO)。
  4. 创建一个 Java 类来将 Java 对象转换为 JSON。
Convert Java object to JSON

步骤 1:创建 Maven 项目

在第一步中,我们需要使用 Eclipse IDE 创建一个 Maven 项目。将 Java 对象转换为 JSON 是一项高级 Java 概念,因此我们建议您使用 Eclipse 等 IDE 来轻松理解程序。

Convert Java object to JSON

步骤 2:在 pom.xml 文件中添加 GSON 依赖项

在下一步中,我们需要将以下 GSON 依赖项添加到 pom.xml 文件中以使用 GSON 库。

添加依赖项后,pom.xml 文件将如下所示:

Convert Java object to JSON

步骤 3:创建要转换为 JSON 的 POJO

在下一步中,我们需要创建一个 POJO,我们想将其转换为 JSON 对象。在我们的示例中,我们创建了一个 MobilePhone 类,其中包含 brand、name、ramrom 的 getter 和 setter。

MobilePhone.java

步骤 4:创建 Java 类以将 Java 对象转换为 JSON

我们需要创建一个新的 Java 类,该类使用 GSON 将 MobilePhone 对象转换为 JSON。在此类中,我们将创建 getMobile() 方法。在该方法内,我们将为 MobilePhone 类的属性设置值并返回 MobilePhone 对象。

在 main 方法中,我们将创建一个 MobilePhone 类的对象,并存储 getMobile() 方法返回的值。之后,我们将使用 Gson().toJson() 方法将该对象转换为 JSON 对象。

ConvertJSON.java

当我们运行 ConvertJSON.java 文件时,我们将看到 MobilePhone 类对象的 JSON 对象。

Convert Java object to JSON

使用 Jackson 库

Jackson 库是最简单的 Java 库之一。Jackson 库用于将 Java 对象序列化为 JSON,反之亦然。Jackson API 的 ObjectMapper 类提供了将 Java 对象转换为 JSON 格式或对象的方法。ObjectMapper 类的 writeValueAsString() 方法以 JSON 对象作为参数,并返回其相应的 JSON 字符串。

使用 Jackson API 将 Java 对象转换为 JSON 对象的步骤如下:

  1. 创建 Maven 项目
  2. 将 Jackson 依赖项添加到 pom.xml 文件。
  3. 创建 POJO 对象。
  4. 创建一个新类,用于将 Java 对象转换为 JSON 对象。
Convert Java object to JSON

步骤 1:创建 Maven 项目

在第一步中,我们需要使用 Eclipse IDE 创建一个 Maven 项目。与 GSON 一样,Eclipse 也支持 Jackson API。

Convert Java object to JSON

步骤 2:在 pom.xml 文件中添加 Jackson 依赖项

在下一步中,我们需要将以下 Jackson 依赖项添加到我们的 pom.xml 文件中以使用 Jackson 库。


Convert Java object to JSON

步骤 3:创建要转换为 JSON 的 POJO

在下一步中,我们需要创建一个 POJO,我们想将其转换为 JSON 对象。在此示例中,我们创建了一个 Product 类,其中包含 id、nameprice 等属性的 getter 和 setter。

Product.java

步骤 4:创建 Java 类以将 Java 对象转换为 JSON

与我们之前的 GSON 示例一样,我们也将创建一个新的 Java 类 ObjectToJson。在该方法内,我们创建了 getObjectData() 方法来为 Product 对象设置值并返回该 Product 类的对象。

在 main() 方法中,我们创建了 Product 类和 ObjectMapper 类的对象。之后,我们将使用 ObjectMapper 类的 writeValueAsString() 方法将 Java 对象转换为 JSON 对象。

ObjectToJson.java

当我们运行 ObjectToJson.java 文件时,我们将看到 Product 类对象的 JSON 字符串。

Convert Java object to JSON

这两种方法在不同场景下都有使用。两者都简单、快速且易于使用和理解。

使用 JSON-B (Java API for JSON Binding)

JSON-B 是 Java EE 8 中引入的标准 Java API,用于 JSON 处理。它提供了注解来定制 Java 对象的 JSON 表示。

ObjectToJsonExample.java

MyClass.java

输出

JSON representation:
{"age":30,"isStudent":false,"name":"John Doe"}
Deserialized object:
Name: John Doe
Age: 30
Is Student: false

上面的代码演示了如何使用 JSON-B 将 Java 对象 (MyClass) 转换为 JSON 格式,然后将 JSON 转换回 Java 对象。


将 Java 对象转换为 JSON 的选择题

1. 下列哪一项正确描述了 Gson 在默认情况下如何处理序列化过程中的 null 字段?

  1. Gson 默认序列化 null 字段。
  2. Gson 默认跳过 null 字段。
  3. 如果遇到 null 字段,Gson 会抛出异常。
  4. Gson 默认将 null 字段替换为空字符串。

答案:b)

解释: 默认情况下,Gson 不会序列化 null 字段。我们可以使用 GsonBuilder.serializeNulls() 来配置它以包含 null 字段。


2. 在 Jackson 中,如何处理 Java 对象序列化过程中的自定义日期格式?

  1. 在日期字段上使用 @JsonFormat 注解。
  2. 在日期字段上使用 @DateFormat 注解。
  3. 使用自定义日期序列化器配置 ObjectMapper。
  4. A 和 C 均正确。

答案:d)

解释: Jackson 允许使用日期字段上的 @JsonFormat 注解或通过使用自定义日期序列化器配置 ObjectMapper 来自定义日期格式。


3. 在使用 Gson 时,哪个类通常用于为特定类型定义复杂的序列化逻辑?

  1. JsonConverter
  2. JsonSerializer
  3. JsonParser
  4. JsonAdapter

答案:b)

解释: Gson 中的 JsonSerializer 接口用于为特定类型定义自定义序列化逻辑。


4. 在 Jackson 中,如何在不使用注解的情况下忽略序列化过程中的某个字段?

  1. 使用 SimpleFilterProvider 配置 ObjectMapper
  2. 使用自定义序列化器
  3. 将字段设为 transient
  4. a 和 b 都是

答案:d)

解释:我们可以使用 SimpleFilterProvider 配置 ObjectMapper 来动态排除字段,或使用自定义序列化器来排除字段。将字段标记为 transient 也会在序列化过程中忽略它,但这并非 Jackson 特有的功能。


5. 在 GSON 中,以下哪个用于处理具有未知属性的 JSON?

  1. JsonTree
  2. JsonElement
  3. JsonParser
  4. JsonDeserializationContext

答案:b)

解释:JsonElement 是一个 Gson 类,可以表示任何 JSON 元素。它对于处理具有未知属性的 JSON 非常有用,因为您可以将 JSON 解析为 JsonElement 并对其进行导航。