Java Jackson 库

Java Jackson 库

Java Jackson 库

Java 常用类库

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 为例):

com.fasterxml.jackson.core

jackson-databind

2.13.0

一个简单的例子,将 Java 与 JSON 对象互转:

实例

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {

public static void main(String[] args) throws Exception {

ObjectMapper mapper = new ObjectMapper();

// Java对象转JSON

Person person = new Person("张三", 30);

String json = mapper.writeValueAsString(person);

System.out.println(json);

// JSON转Java对象

Person parsedPerson = mapper.readValue(json, Person.class);

System.out.println(parsedPerson);

}

}

class Person {

private String name;

private int age;

// 必须有无参构造函数

public Person() {}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

// 必须有getter和setter

// 省略getter/setter和toString方法

}

创建 ObjectMapper

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

ObjectMapper mapper = new ObjectMapper();

JSON 序列化(对象 → JSON)

简单示例

实例

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}

格式化输出

实例

String prettyJson = mapper.writerWithDefaultPrettyPrinter()

.writeValueAsString(person);

System.out.println(prettyJson);

/*

输出:

{

"name" : "张三",

"age" : 25

}

*/

JSON 反序列化(JSON → 对象)

简单示例

实例

String json = "{\"name\":\"李四\",\"age\":30}";

Person person = mapper.readValue(json, Person.class);

System.out.println(person.getName()); // 输出: 李四

从文件读取

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

常用注解

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

@JsonProperty

指定 JSON 属性名:

@JsonProperty("user_name")

private String name;

@JsonIgnore

忽略某个字段:

@JsonIgnore

private String password;

@JsonFormat

格式化日期:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")

private Date birthDate;

处理复杂类型

集合类型

实例

List people = Arrays.asList(

new Person("王五", 28),

new Person("赵六", 32)

);

String json = mapper.writeValueAsString(people);

// 输出: [{"name":"王五","age":28},{"name":"赵六","age":32}]

Map 类型

实例

Map 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 节点:

实例

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 数据的效率和灵活性。

Java 常用类库

相关创意

冬瓜坐不住果怎么办
注册送365

冬瓜坐不住果怎么办

📅 10-15 👁️ 2573
如何卸载乐视电视上已安装的应用
bt365网址

如何卸载乐视电视上已安装的应用

📅 08-13 👁️ 850
赧汗的意思
bt365网址

赧汗的意思

📅 08-04 👁️ 5790
iMac 每天都要用,需要关机吗
注册送365

iMac 每天都要用,需要关机吗

📅 08-27 👁️ 4511
淘宝大学课程实用吗?能学到哪些电商知识?
苎麻的市场价格,不同地区的价格都会有所差异
快手发布作品怎么赚钱和提现?从哪里发视频能挣钱?2024-04-14 20:49:3012481浏览
《爱情上上签》中国大陆电视剧完整版资源免费在线观看,全集