在 Java 中处理 JSON:解析与序列化
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于现代 Web 应用程序、API 和微服务中。在 Java 中,处理 JSON 已成为开发中不可或缺的一部分,无论是解析服务器响应、序列化对象以进行存储,还是在系统组件之间传输数据。在本文中,我们将详细讲解如何使用两个流行的库:Google 的 Gson 和 Jackson,在 Java 中执行 JSON 的解析与序列化。
1. 什么是 JSON,为什么在 Java 中需要它?
JSON 是一种基于“键-值”对和有序列表的文本格式。它易于人类和机器阅读,使其成为服务器与客户端之间数据传输的理想选择。在 Java 中,JSON 用于:
- 数据交换——通过 REST API(例如,从服务器获取数据或发送表单)。
- 配置文件——许多框架使用 JSON 来配置应用程序。
- 对象序列化——将 Java 对象转换为 JSON 字符串,以便保存到文件或数据库。
- 反序列化——从 JSON 字符串恢复 Java 对象。
Java 直到版本 9(引入了 java.json 模块)才内置了对 JSON 的支持,因此开发者通常使用第三方库,例如 Gson 和 Jackson。我们来分别看看它们。
2. 使用 Gson 解析 JSON
Gson 是 Google 的一个轻量级库,可以轻松地将 JSON 转换为 Java 对象,反之亦然。它使用简单,对于基本场景不需要额外的注解。
2.1. 安装 Gson
将依赖项添加到您的 pom.xml(Maven):
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>如果您使用 Gradle:
implementation 'com.google.code.gson:gson:2.10.1'2.2. 将 JSON 解析为 Java 对象(反序列化)
假设我们有一个包含用户信息的 JSON 字符串:
{ "name": "伊万·彼得罗夫", "age": 30, "email": "ivan@example.com"}创建一个 User 类:
public class User { private String name; private int age; private String email;
// Getters 和 Setters(对于 Gson 是必需的) public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}现在解析 JSON:
import com.google.gson.Gson;
public class Main { public static void main(String[] args) { String jsonString = "{\\"name\\":\\"伊万·彼得罗夫\\",\\"age\\":30,\\"email\\":\\"ivan@example.com\\"}"; Gson gson = new Gson(); User user = gson.fromJson(jsonString, User.class); System.out.println("姓名: " + user.getName()); System.out.println("年龄: " + user.getAge()); }}输出:
姓名: 伊万·彼得罗夫年龄: 302.3. 将 Java 对象序列化为 JSON
反向过程——将对象转换为 JSON:
User user = new User();user.setName("玛丽亚·斯米尔诺娃");user.setAge(25);user.setEmail("maria@example.com");
Gson gson = new Gson();String json = gson.toJson(user);System.out.println(json);结果:
{"name":"玛丽亚·斯