“Spring MVC 默认采用Jackson解析Json,尽管还有一些其它同样优秀的json解析工具,例如Fast Json、GSON,但是出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。”
什么是Jackson?(官方介绍)
Jackson 被称为“Java 的 JSON 库”或“Java 最佳 JSON 解析器”,简而言之就是“Java 的 JSON”。更进一步地,Jackson 是一套针对 Java(和 JVM 平台)的数据处理工具集,包括旗舰流式 JSON 解析器 / 生成器库、匹配数据绑定库(将 POJOs 与 JSON 相互转换)以及其他数据格式模块,用于处理编码为 Avro、BSON、CBOR、CSV、Smile、(Java)属性、Protobuf、TOML、XML 或 YAML 的数据;还包括大量数据格式模块,以支持 Guava、Joda、PCollections 等广泛使用的数据类型。
虽然实际核心组件在它们自己的项目中(包括三个核心包(streaming、databind、annotations)、数据格式库、数据类型库、JAX-RS 提供程序以及一组其他扩展模块),但此项目作为将所有部分链接在一起的中央枢纽。
此 README 的一个好伙伴是 Jackson 项目 FAQ。
Maven配置
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>
Java对象和JSON的相互转换案例
ObjectMapper
是 Jackson
库中的一个核心类,用于序列化和反序列化 JSON
格式的数据。
将 JSON 转换成 Java 对象
以下是将 JSON 格式数据转换成 Java 对象的示例代码:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonDemo {
public static void main(String[] args) throws Exception {
// 定义了一个 JSON 格式的字符串
String json = "{\"name\":\"John\", \"age\":30}";
// 使用 ObjectMapper 类来将其转换成一个 Person 对象
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName()); // 输出 John
System.out.println(person.getAge()); // 输出 30
}
}
// Person 类必须要有无参构造函数,并且需要提供对应的 getter 和 setter 方法,以便 ObjectMapper 可以将 JSON 数据转换成 Person 对象。
class Person {
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; }
}
将 Java 对象转换成 JSON
以下是将 Java 对象转换成 JSON 格式数据的示例代码:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonDemo {
public static void main(String[] args) throws Exception {
// 创建了一个 Person 对象
Person person = new Person();
person.setName("John");
person.setAge(30);
// 使用 ObjectMapper 类将其转换成 JSON 格式的数据
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json); // 输出 {"name":"John","age":30}
}
}
class Person {
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; }
}
Jackson 常用 API 方法介绍:
-
ObjectMapper API:ObjectMapper 是 Jackson 中最重要的类之一,用于将 Java 对象序列化为 JSON 或反序列化 JSON 字符串为 Java 对象。常用的 ObjectMapper API 方法包括:
readValue()
:将 JSON 字符串反序列化为 Java 对象。writeValueAsString()
:将 Java 对象序列化为 JSON 字符串。
-
JsonNode API:JsonNode 是 Jackson 中处理 JSON 的核心数据结构之一,可以表示 JSON 中的一个节点,即一个 JSON 对象、数组、字符串等。常用的 JsonNode API 方法包括:
get()
:获取 JSON 对象中指定属性名的节点。asText()
:获取 JSON 字符串的文本值。asInt()
:获取 JSON 数值的整数值。
-
JsonParser API:JsonParser 是 Jackson 中用于解析 JSON 字符串的类,可以将 JSON 字符串解析为一系列的 JSON 事件(event),然后通过事件驱动的方式进行处理。常用的 JsonParser API 方法包括:
nextToken()
:获取下一个 JSON 事件(event)。getText()
:获取当前 JSON 事件(event)的文本值。getIntValue()
:获取当前 JSON 事件(event)的整数值。
-
JsonGenerator API:JsonGenerator 是 Jackson 中用于生成 JSON 字符串的类,可以将 Java 对象序列化为 JSON 字符串。常用的 JsonGenerator API 方法包括:
writeStartObject()
:开始写入 JSON 对象。writeFieldName()
:写入 JSON 对象的属性名。writeString()
:写入 JSON 字符串的值。
这些 API 方法只是 Jackson 中的一部分,Jackson 还提供了更多的 API 方法,开发者可以根据自己的需要选择使用。