JSON 处理在 Java 中:Jackson 和 Gson 库
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,广泛应用于 Web 开发、API 和微服务中。在 Java 中,有多个强大的库可用于处理 JSON,其中最流行的是 Jackson 和 Gson。在本文中,我们将详细介绍这两个库、它们的功能、使用示例以及特点。
1. Jackson 库
Jackson 是由 FasterXML 开发的高性能 Java JSON 处理库。它提供了一套完整的工具,用于序列化、反序列化、解析和数据转换。Jackson 是 Spring 生态系统中的事实标准。
Jackson 的主要功能:
- ObjectMapper — 用于将 Java 对象转换为 JSON 以及反向转换的主要类。
- 注解 — 通过注解(
@JsonProperty、@JsonIgnore、@JsonFormat)灵活配置序列化。 - 支持 Stream API — 读取和写入 JSON 流。
- 可自定义序列化 — 能够创建自定义的序列化器和反序列化器。
Jackson 使用示例:
import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;
public class JacksonExample { public static void main(String[] args) throws Exception { // 创建映射对象 ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT);
// 示例类 Person person = new Person("Иван", 30, "ivan@example.com");
// 序列化为 JSON String jsonString = mapper.writeValueAsString(person); System.out.println("JSON: " + jsonString);
// 从 JSON 反序列化 String jsonInput = "{\\"name\\":\\"Мария\\",\\"age\\":25,\\"email\\":\\"maria@example.com\\"}"; Person deserializedPerson = mapper.readValue(jsonInput, Person.class); System.out.println("对象: " + deserializedPerson.getName()); }}
class Person { private String name; private int age; private String email;
public Person() {} // 必需的无参构造器
public Person(String name, int age, String email) { this.name = name; this.age = age; this.email = email; }
// getters 和 setters 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; }}Jackson 依赖配置 (Maven):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>2. Gson 库
Gson 是 Google 开发的库,用于将 Java 对象序列化和反序列化为 JSON 格式。它以其简单易用和轻量级而著称。Gson 通常被选用于小型项目和 Android 移动开发。
Gson 的主要功能:
- GsonBuilder — 配置序列化行为。
- 注解 — 支持
@SerializedName用于重命名字段。 - 支持 JSON 数组 — 处理集合。
- Null 处理 — 包含/排除 null 值的选项。
Gson 使用示例:
import com.google.gson.Gson;import com.google.gson.GsonB