Java 中 GSON 的 fromJson() 和 toJson() 方法的区别

10 Sept 2024 | 4 分钟阅读

在现代软件开发领域,数据的交换和处理起着至关重要的作用。这通常涉及将数据从一种表示形式转换为另一种,例如从对象到序列化格式,反之亦然。

在 Java 编程中,用于完成此任务的两个基本方法是 **fromJson()** 和 **toJson()**。这些方法是 GSON 和 Jackson 等流行库的基本组成部分,它们提供了强大的数据序列化和反序列化工具。在本节中,我们将讨论 **Java 中 fromJson() 和 toJson() 之间的区别**,并重点介绍它们各自的用例。

序列化和反序列化

在深入了解 fromJson() 和 toJson() 的具体细节之前,理解序列化和反序列化的概念至关重要。序列化涉及将对象的 [状态](https://www.geeksforgeeks.org/serialization-in-java/) 转换为可以轻松存储或传输的格式,通常是字符串。另一方面,反序列化是从序列化表示中重新构建对象的过程。这些过程在处理数据传输和存储时非常重要,尤其是在通过网络发送数据或将数据持久化到数据库等场景中。

fromJson(): 轻松实现反序列化

fromJson() 方法主要用于反序列化。它以序列化字符串(通常是 JSON 格式)作为输入,并将其转换为 Java 对象,从而允许您使用 Java 的面向对象功能来处理数据。此方法解释序列化字符串中的结构和数据,并将其映射回 Java 对象的相应字段和属性。Gson 和 Jackson 等库提供了 fromJson() 的实现来促进此过程。

以下是 fromJson() 工作方式的简化示例

在此示例中,使用 Gson 的 fromJson() 方法将代表用户信息的 JSON 字符串转换为 User 对象。该方法解析 JSON,将其属性与 User 类中的字段匹配,并返回一个完全填充的 User 对象。

toJson(): 对象序列化实践

另一方面,toJson() 方法用于将 Java 对象序列化为字符串格式,通常是 JSON。此方法以 Java 对象作为输入,并将其状态转换为 JSON 格式的字符串。然后,可以轻松地共享、存储或跨各种系统传输此字符串。当您需要平台之间传递数据或将其以人类可读的格式持久化时,它特别有用。

请看以下示例

在这种情况下,使用 Gson 库的 toJson() 方法将 User 对象序列化为 JSON 字符串。生成的 JSON 字符串可以发送到网络、存储在文件中或以其他方式使用。

Java 中 fromJson() 和 toJson() 方法之间的主要区别

特性fromJson()toJson()
目的将 JSON 数据转换为 Java 对象。将 Java 对象转换为 JSON 数据。
输入参数接受 JSON 字符串作为输入。接受 Java 对象作为输入。
输出结果生成相应的 Java 对象或数据结构。生成表示 Java 对象的 JSON 字符串。
库依赖通常与 Gson 或 Jackson 等库相关联。通常与 Gson 或 Jackson 等库相关联。
用例在使用外部 JSON 数据(例如从 API 检索到的数据)时很有用。准备要发送到期望 JSON 的外部系统或服务的数据时很有用。

用例

fromJson() 和 toJson() 之间的主要区别在于它们的目的和数据转换方向。fromJson() 用于将序列化数据(例如 JSON)转换为 Java 对象,而 toJson() 用于将 Java 对象转换为序列化格式(例如 JSON)。前者在从外部源或 API 接收数据时至关重要,而后者对于准备要存储或传输的数据至关重要。

FromJsonToJsonExample.java

输出

Serialized JSON: {"name":"Alice","age":25}
Deserialized User: User{name='Bob', age=30}

在此程序中,我们首先创建一个名为“Alice”,年龄为 25 的 User 对象。然后,我们使用 toJson() 方法将此对象序列化为 JSON 格式的字符串。输出显示了序列化的 JSON 字符串。

接下来,我们有一个 JSON 字符串作为输入,代表名为“Bob”且年龄为 30 的用户。我们使用 fromJson() 方法将此 JSON 字符串反序列化为 User 对象。输出显示了反序列化的用户对象。