Jackson 是一个流行的 JSON 处理库,用于在 Java 应用程序中将对象序列化为 JSON 格式或将 JSON 数据反序列化为 Java 对象。它提供了高性能、灵活且易于使用的 API。
Jackson 提供了三种主要的模块:
首先,你需要在项目中引入 Jackson 的依赖。如果你使用的是 Maven 项目,可以在 pom.xml
中添加以下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version> <!-- 版本号可以根据需要调整 -->
</dependency>
假设我们有一个简单的 Java 类 User
:
public class User {
private String name;
private int age;
// 构造函数、getter 和 setter 方法
public User(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
我们可以使用 Jackson 将 User
对象转换为 JSON 字符串:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
User user = new User("Alice", 25);
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(user);
System.out.println(jsonString); // 输出: {"name":"Alice","age":25}
}
}
同样,我们可以将 JSON 字符串转换回 Java 对象:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"Bob\",\"age\":30}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class);
System.out.println(user.getName()); // 输出: Bob
System.out.println(user.getAge()); // 输出: 30
}
}
Jackson 提供了许多注解来控制序列化和反序列化的行为。例如:
@JsonIgnore
:忽略某个字段。@JsonProperty
:指定字段的名称。@JsonFormat
:格式化日期等特殊类型的数据。示例:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
@JsonProperty("full_name")
private String name;
@JsonIgnore
private int age;
// 构造函数、getter 和 setter 方法
public User(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
在这个例子中,name
字段会被序列化为 full_name
,而 age
字段会被忽略。
Jackson 还可以处理嵌套对象和集合类型的序列化和反序列化。例如:
import java.util.List;
public class Company {
private String name;
private List<User> employees;
// 构造函数、getter 和 setter 方法
public Company(String name, List<User> employees) {
this.name = name;
this.employees = employees;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getEmployees() {
return employees;
}
public void setEmployees(List<User> employees) {
this.employees = employees;
}
}
序列化和反序列化的代码与之前类似,Jackson 会自动处理嵌套对象和集合。
在高并发环境下,ObjectMapper
是线程安全的,因此可以将其作为单例使用。你可以通过以下方式创建一个单例的 ObjectMapper
实例:
public class ObjectMapperHolder {
private static final ObjectMapper MAPPER = new ObjectMapper();
public static ObjectMapper getInstance() {
return MAPPER;
}
}
然后在你的代码中使用 ObjectMapperHolder.getInstance()
来获取 ObjectMapper
实例。
Jackson 是 Java 中处理 JSON 数据的强大工具,支持从简单的序列化和反序列化到复杂的自定义注解和性能优化。通过掌握这些功能,你可以在各种应用场景中高效地处理 JSON 数据。