jackson教程——Java 最佳 JSON 解析器

jackson教程——Java 最佳 JSON 解析器

“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的相互转换案例

ObjectMapperJackson 库中的一个核心类,用于序列化和反序列化 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 方法介绍:

  1. ObjectMapper API:ObjectMapper 是 Jackson 中最重要的类之一,用于将 Java 对象序列化为 JSON 或反序列化 JSON 字符串为 Java 对象。常用的 ObjectMapper API 方法包括:

    • readValue():将 JSON 字符串反序列化为 Java 对象。
    • writeValueAsString():将 Java 对象序列化为 JSON 字符串。
  2. JsonNode API:JsonNode 是 Jackson 中处理 JSON 的核心数据结构之一,可以表示 JSON 中的一个节点,即一个 JSON 对象、数组、字符串等。常用的 JsonNode API 方法包括:

    • get():获取 JSON 对象中指定属性名的节点。
    • asText():获取 JSON 字符串的文本值。
    • asInt():获取 JSON 数值的整数值。
  3. JsonParser API:JsonParser 是 Jackson 中用于解析 JSON 字符串的类,可以将 JSON 字符串解析为一系列的 JSON 事件(event),然后通过事件驱动的方式进行处理。常用的 JsonParser API 方法包括:

    • nextToken():获取下一个 JSON 事件(event)。
    • getText():获取当前 JSON 事件(event)的文本值。
    • getIntValue():获取当前 JSON 事件(event)的整数值。
  4. JsonGenerator API:JsonGenerator 是 Jackson 中用于生成 JSON 字符串的类,可以将 Java 对象序列化为 JSON 字符串。常用的 JsonGenerator API 方法包括:

    • writeStartObject():开始写入 JSON 对象。
    • writeFieldName():写入 JSON 对象的属性名。
    • writeString():写入 JSON 字符串的值。

这些 API 方法只是 Jackson 中的一部分,Jackson 还提供了更多的 API 方法,开发者可以根据自己的需要选择使用。