公司做网站的费用计什么科目,网站多少钱,网站建设百度不通过,武昌网站建设哪家便宜全面掌握 Jackson 序列化工具#xff1a;原理、使用与高级配置详解
Jackson 是一个功能强大的 JSON 处理库#xff0c;广泛应用于 Java 项目中。它提供了丰富的功能和灵活的配置选项#xff0c;可以轻松地在 Java 对象和 JSON 数据之间进行转换。本文将详细介绍 Jackson 的…全面掌握 Jackson 序列化工具原理、使用与高级配置详解
Jackson 是一个功能强大的 JSON 处理库广泛应用于 Java 项目中。它提供了丰富的功能和灵活的配置选项可以轻松地在 Java 对象和 JSON 数据之间进行转换。本文将详细介绍 Jackson 的核心概念、基本用法、高级配置及处理集合类型的数据旨在帮助你全面掌握 Jackson 的使用方法。
一、Jackson 的核心概念
1. ObjectMapper
ObjectMapper 是 Jackson 的核心类负责将 Java 对象转换为 JSON 以及将 JSON 转换为 Java 对象。它提供了许多方法来处理这些操作例如 writeValue、readValue 等。
2. JsonParser 和 JsonGenerator
JsonParser低级别的 JSON 解析器用于逐步解析 JSON 内容。JsonGenerator低级别的 JSON 生成器用于逐步生成 JSON 内容。
3. Annotations
Jackson 提供了许多注解来定制序列化和反序列化过程包括但不限于
JsonProperty指定字段的 JSON 名称。JsonIgnore忽略字段。JsonFormat格式化日期和时间。JsonInclude指定包含的条件。
二、添加依赖
在你的项目中添加 Jackson 依赖。以 Maven 为例
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.3/version
/dependency对于 Gradle 项目
implementation com.fasterxml.jackson.core:jackson-databind:2.12.3三、基本用法
1. 序列化和反序列化
以下示例展示了如何使用 ObjectMapper 序列化和反序列化 Java 对象
import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonExample {public static void main(String[] args) {try {ObjectMapper objectMapper new ObjectMapper();// 创建一个对象User user new User();user.setName(John);user.setAge(30);// 序列化Java 对象 - JSON 字符串String jsonString objectMapper.writeValueAsString(user);System.out.println(JSON String: jsonString);// 反序列化JSON 字符串 - Java 对象User deserializedUser objectMapper.readValue(jsonString, User.class);System.out.println(Deserialized User: deserializedUser);} catch (Exception e) {e.printStackTrace();}}
}class User {private String name;private int age;// getters and setterspublic 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;}Overridepublic String toString() {return User{name name , age age };}
}2. 使用注解定制序列化和反序列化
Jackson 提供了许多注解来定制序列化和反序列化过程。例如
JsonProperty用于指定 JSON 字段名。JsonIgnore用于忽略某个字段。JsonFormat用于指定日期格式。
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;class User {JsonProperty(full_name)private String name;JsonIgnoreprivate int age;JsonFormat(shape JsonFormat.Shape.STRING, pattern dd-MM-yyyy)private Date birthDate;// getters and setterspublic 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 Date getBirthDate() {return birthDate;}public void setBirthDate(Date birthDate) {this.birthDate birthDate;}Overridepublic String toString() {return User{name name , age age , birthDate birthDate };}
}使用上述类生成的 JSON 将如下所示
{full_name: John,birthDate: 25-12-1990
}3. 高级配置
可以通过配置 ObjectMapper 来自定义其行为。例如
ObjectMapper objectMapper new ObjectMapper();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); // 格式化输出
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略未知属性这些配置允许你格式化输出 JSON 和忽略未知属性。
四、处理复杂对象
Jackson 还可以处理复杂对象和集合类型。
1. 处理嵌套对象
class Address {private String street;private String city;// getters and setterspublic String getStreet() {return street;}public void setStreet(String street) {this.street street;}public String getCity() {return city;}public void setCity(String city) {this.city city;}
}class User {private String name;private int age;private Address address;// getters and setterspublic 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 Address getAddress() {return address;}public void setAddress(Address address) {this.address address;}Overridepublic String toString() {return User{name name , age age , address address };}
}2. 处理集合类型
以下示例展示了如何处理包含复杂对象的集合类型List、Map 等。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.ArrayList;
import java.util.List;public class JacksonCollectionExample {public static void main(String[] args) {try {ObjectMapper objectMapper new ObjectMapper();// 创建用户列表ListUser userList new ArrayList();userList.add(new User(John Doe, 30));userList.add(new User(Jane Doe, 25));// 序列化用户列表Java 对象 - JSON 字符串String userListJson objectMapper.writeValueAsString(userList);System.out.println(User List JSON:\n userListJson);// 反序列化用户列表JSON 字符串 - Java 对象ListUser deserializedUserList objectMapper.readValue(userListJson, new TypeReferenceListUser(){});System.out.println(Deserialized User List:\n deserializedUserList);// 创建组对象Group group new Group(Admins, userList);// 序列化组对象Java 对象 - JSON 字符串String groupJson objectMapper.writeValueAsString(group);System.out.println(Group JSON:\n groupJson);// 反序列化组对象JSON 字符串 - Java 对象Group deserializedGroup objectMapper.readValue(groupJson, Group.class);System.out.println(Deserialized Group:\n deserializedGroup);} catch (Exception e) {e.printStackTrace();}}
}class Group {private String groupName;private ListUser users;// Constructorspublic Group() {}public Group(String groupName, ListUser users) {this.groupName groupName;this.users users;}// Getters and Setterspublic String getGroupName() {return groupName;}public void setGroupName(String groupName) {this.groupName groupName;}public ListUser getUsers() {return users;}public void setUsers(ListUser users) {this.users users;}Overridepublic String toString() {return Group{groupName groupName , users users };}
}代码解析
1. 创建用户列表
ListUser userList new ArrayList();
userList.add(new User(John Doe, 30));
userList.add(new User(Jane Doe, 25));创建一个包含两个 User 对象的 ArrayList。
2. 序列化用户列表
String userListJson objectMapper.writeValueAsString(userList);
System.out.println(User List JSON:\n userListJson);使用 ObjectMapper 将用户列表序列化为 JSON 字符串。
3. 反序列化用户列表
ListUser deserializedUserList objectMapper.readValue(userListJson, new TypeReferenceListUser(){});
System.out.println(Deserialized User List:\n deserializedUserList);使用 ObjectMapper 将 JSON 字符串反序列化为 List。注意 TypeReference 用于处理泛型类型。
4. 创建组对象
Group group new Group(Admins, userList);创建一个 Group 对象其中包含一个组名和用户列表。
5. 序列化组对象
String groupJson objectMapper.writeValueAsString(group);
System.out.println(Group JSON:\n groupJson);使用 ObjectMapper 将组对象序列化为 JSON 字符串。
6. 反序列化组对象
Group deserializedGroup objectMapper.readValue(groupJson, Group.class);
System.out.println(Deserialized Group:\n deserializedGroup);使用 ObjectMapper 将 JSON 字符串反序列化为 Group 对象。
五、总结
通过上述内容我们详细介绍了 Jackson 的基本概念、用法、高级配置以及处理复杂对象和集合类型的示例。掌握这些技术可以在实际项目中高效地使用 Jackson 处理 JSON 数据。
Jackson 是一个强大且灵活的工具能够满足各种 JSON 处理需求。希望本教程能够帮助你更好地理解和使用 Jackson。