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>
<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}
<h3>格式化输出</h3> ```java String prettyJson = mapper.writerWithDefaultPrettyPrinter() .writeValueAsString(person); System.out.println(prettyJson); /* 输出: { "name" : "张三", "age" : 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 ListString json = mapper.writeValueAsString(people); // 输出: [{"name":"王五","age":28},{"name":"赵六","age":32}]
<h3>Map 类型</h3> ```java Map<String, Object> data = new HashMap<>(); data.put("name", "张三"); data.put("age", 25); data.put("isStudent", true); String json = mapper.writeValueAsString(data); // 输出: {"name":"张三","age":25,"isStudent":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(); ```最佳实践
- 重用 ObjectMapper:创建
ObjectMapper
实例开销较大,应该重用同一个实例 - 处理异常:始终处理
JsonProcessingException
和IOException
- 使用 DTO 模式:不要直接序列化领域模型,使用专门的数据传输对象(DTO)
- 考虑性能:对于高性能场景,可以使用
JsonFactory
进行底层操作
总结
Jackson 是 Java 处理 JSON 的强大工具,提供了:
- 简单易用的 API
- 高性能的 JSON 处理能力
- 丰富的定制选项
- 良好的社区支持
掌握 Jackson 可以大大提高 Java 开发中处理 JSON 数据的效率和灵活性。
点我分享笔记