Java Jackson 库

Jackson 是一个用于 Java 的高性能 JSON 处理库,它能够:

  • 将 Java 对象序列化为 JSON 格式(对象 → JSON)
  • 将 JSON 反序列化为 Java 对象(JSON → 对象)

Jackson 因其速度快、功能强大且易于使用而成为 Java 生态中最流行的 JSON 处理库之一。

Jackson 核心模块

  • 1. Jackson Core:Jackson 的核心模块,提供了基本的 JSON 解析和生成功能。
  • 2. Jackson Annotations:包含各种注解,用于控制序列化和反序列化过程。
  • 3. Jackson Databind:提供数据绑定功能,可以在 Java 对象和 JSON 之间进行转换。

基本使用方法

添加依赖

首先需要在项目中添加 Jackson 依赖(以 Maven 为例):
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>

创建 ObjectMapper

`ObjectMapper` 是 Jackson 的核心类,负责序列化和反序列化:

实例

ObjectMapper mapper = new ObjectMapper();

JSON 序列化(对象 → JSON)

简单示例

```java public class Person { private String name; private int age; // 省略构造函数、getter 和 setter }

Person person = new Person("张三", 25); String json = mapper.writeValueAsString(person); System.out.println(json); // 输出: {"name":"张三","age":25}

&lt;h3&gt;格式化输出&lt;/h3&gt;
```java
String prettyJson = mapper.writerWithDefaultPrettyPrinter()
                         .writeValueAsString(person);
System.out.println(prettyJson);
/*
输出:
{
  &quot;name&quot; : &quot;张三&quot;,
  &quot;age&quot; : 25
}
*/

JSON 反序列化(JSON → 对象)

简单示例

```java String json = "{\"name\":\"李四\",\"age\":30}"; Person person = mapper.readValue(json, Person.class); System.out.println(person.getName()); // 输出: 李四 ```

从文件读取

```java Person person = mapper.readValue(new File("person.json"), Person.class); ```

常用注解

Jackson 提供了多种注解来控制序列化和反序列化过程:

@JsonProperty

指定 JSON 属性名: ```java @JsonProperty("user_name") private String name; ```

@JsonIgnore

忽略某个字段: ```java @JsonIgnore private String password; ```

@JsonFormat

格式化日期: ```java @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private Date birthDate; ```

处理复杂类型

集合类型

```java List people = Arrays.asList( new Person("王五", 28), new Person("赵六", 32) );

String json = mapper.writeValueAsString(people); // 输出: [{"name":"王五","age":28},{"name":"赵六","age":32}]

&lt;h3&gt;Map 类型&lt;/h3&gt;
```java
Map&lt;String, Object&gt; data = new HashMap&lt;&gt;();
data.put(&quot;name&quot;, &quot;张三&quot;);
data.put(&quot;age&quot;, 25);
data.put(&quot;isStudent&quot;, true);

String json = mapper.writeValueAsString(data);
// 输出: {&quot;name&quot;:&quot;张三&quot;,&quot;age&quot;:25,&quot;isStudent&quot;:true}

高级特性

自定义序列化/反序列化

通过继承 `JsonSerializer` 和 `JsonDeserializer` 可以实现自定义的序列化和反序列化逻辑。

多态类型处理

使用 `@JsonTypeInfo` 和 `@JsonSubTypes` 注解处理继承和多态。

树模型

Jackson 提供了树模型 API,可以直接操作 JSON 节点: ```java JsonNode rootNode = mapper.readTree(json); String name = rootNode.get("name").asText(); int age = rootNode.get("age").asInt(); ```

最佳实践

  1. 重用 ObjectMapper:创建 ObjectMapper 实例开销较大,应该重用同一个实例
  2. 处理异常:始终处理 JsonProcessingExceptionIOException
  3. 使用 DTO 模式:不要直接序列化领域模型,使用专门的数据传输对象(DTO)
  4. 考虑性能:对于高性能场景,可以使用 JsonFactory 进行底层操作

总结

Jackson 是 Java 处理 JSON 的强大工具,提供了:

  • 简单易用的 API
  • 高性能的 JSON 处理能力
  • 丰富的定制选项
  • 良好的社区支持

掌握 Jackson 可以大大提高 Java 开发中处理 JSON 数据的效率和灵活性。

Java File Java java.nio.file.Files