Jackson教程
入门配置

Jackson是一个基于Java的高性能JSON处理器,其核心功能是实现数据与Java对象之间的序列化/反序列化。

Jackson最初只是实现JSON数据的绑定,但是发展至今,它也支持其他格式的数据,只要有对应的解析器和生成器就可以了。

由于JSON格式简单,序列化速度也比较快,深受广大程序员们的喜欢。大多数时候,我们提到Jackson,或者使用Jackson,都是用来处理JSON数据的。

在开始使用之前,第一步是获得Jackson包,配置好依赖关系。

目前广泛使用的依赖管理工具,主要有Maven和Gradle,我们以Maven为例。

Maven依赖配置

使用Jackson只需要声明一个依赖包jackson-databind,版本号可以根据实际情况进行设置。

  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
  </dependency>

实际上,jackson-databind包依赖于jackson-core和jackson-annotations两个包。如果使用Maven或Gradle,那么这两个包会自动被引用进来,不需要单独声明。

如果不使用依赖管理工具,那么需要手工去下载这3个包,并引入到工程里面。

jackson-databind的GitHub地址:https://github.com/FasterXML/jackson-databind (opens in a new tab)

第一个例子

首先,定义一个简单的Java类,用于封装数据。

public class People {
	private String name;
	private int 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;
	}
}

序列化

为了进行序列化,需要创建一个ObjectMapper对象,然后调用它的writeValue*方法传入对象进行序列化。

以下例子,先创建一个People对象,然后依次序列化为JSON字符串、字节数组和JSON字符串序列化到目标文件中。

@Test
public void serialize() throws IOException {
	// 创建一个Java Bean对象
	People people = new People();
	people.setName("sam");
	people.setAge(26);
	
	// 为了进行序列化/反序列化,需要创建一个ObjectMapper对象
	ObjectMapper mapper = new ObjectMapper();
	
	// 将people对象序列化为字符串
	String jsonString = mapper.writeValueAsString(people);
	System.out.println("序列化为JSON字符串:" + jsonString);
	
	// 将people对象序列化为字节数组
	byte[] jsonBytes = mapper.writeValueAsBytes(people);
	System.out.println("序列化为字节数组,再转换为字符串:" + new String(jsonBytes, "UTF-8"));
	
	// 将people对象序列化为JSON字符串,并保存到文件result.json中
	mapper.writeValue(new File("result.json"), people);
}

执行结果:

序列化为JSON字符串:{"name":"sam","age":26}
序列化为字节数组,再转换为字符串:{"name":"sam","age":26}

result.json文件内容为:{"name":"sam","age":26}

反序列化

与writeValue*相对应,反序列化使用的是readValue方法,支持从字符串、字节数组、本地文件和远程文件等地方进行反序列化。

@Test
public void deserialize() throws IOException {
	// 为了进行序列化/反序列化,需要创建一个ObjectMapper对象
	ObjectMapper mapper = new ObjectMapper();
	
	// 将JSON字符串反序列化为People对象
	People people1 = mapper.readValue("{\"name\":\"fanny\", \"age\":26}", People.class);
	System.out.println("name: " + people1.getName() + ", age: " + people1.getAge());
	
	// 将文件中的JSON字符串反序列化为People对象
	People people2 = mapper.readValue(new File("D://result.json"), People.class);
	System.out.println("name: " + people2.getName() + ", age: " + people2.getAge());
	
	// 将字节数组反序列化为People对象
	byte[] jsonBytes = mapper.writeValueAsBytes(people2);
	People people3 = mapper.readValue(jsonBytes, People.class);
	System.out.println("name: " + people3.getName() + ", age: " + people3.getAge());
	
	// 读取网络文件中的JSON字符串,并反序列化为People对象
	People people4 = mapper.readValue(new URL("http://youwebsite.com/result.json"), People.class);
	System.out.println("name: " + people4.getName() + ", age: " + people4.getAge());
}

执行结果:

name: fanny, age: 26
name: sam, age: 26
name: sam, age: 26
name: sam, age: 26

好了,Jackson入门就先讲这么多,更多内容可参考官方Github。

参考

https://github.com/FasterXML/jackson-databind (opens in a new tab)

https://github.com/FasterXML/jackson-docs (opens in a new tab)