使用 Jackson 操作 JSON 数据

文章目录

    • 1. 工具简介
    • 2. 简单使用
      • 2.1. 数据绑定
        • 2.1.1. JavaBean 转 JSON 字符串
        • 2.1.2. JSON 字符串转 JavaBean
        • 2.1.3. JSON 字符串转 Map 集合
        • 2.1.4. JavaBean 写入到文件
        • 2.1.5. JavaBean 转字节数组
      • 2.2. JSON 树模型
        • 2.2.1. 构建 JSON 树模型
        • 2.2.2. JSON 树转 JSON 字符串
        • 2.2.3. 解析 JSON 树模型
      • 2.3. 流式 API
    • 3. 注解使用
      • 3.1. @JsonProperty
      • 3.2. @JsonIgnore
      • 3.3. @JsonIgnoreProperties
      • 3.4. @JsonIgnoreType
      • 3.5. @JsonInclude
      • 3.6. @JsonFormat
      • 3.7. @JsonPropertyOrder
      • 3.8. @JsonRootName
      • 3.9. @JsonAnySetter 和 @JsonAnyGetter
        • 3.9.1. @JsonAnyGetter
        • 3.9.2. @JsonAnySetter
        • 3.9.3. 示例代码
      • 3.10. @JsonNaming
    • 4. Jackson 配置


1. 工具简介

Jackson 项目 GitHub 主页

Baeldung 上关于 JSON 的使用

涉及到一些不常见的用法或功能,可以到以上两个地址查看,网上博客类的资料相对较少。

Jackson核心模块是所有扩展的基础。目前有3个核心模块(从Jackson 2.x开始):

  • Streaming:(jackson-core)定义了低级流API,包括JSON特性的实现。
  • Annotations:(jackson-annotations)包含标准的Jackson注解。
  • Databind:(jackson-databind)实现了数据绑定(和对象序列化)支持,它依赖于StreamingAnnotations包。
<dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-coreartifactId>
    <version>${jackson.version.core}version>
dependency>
<dependency>
  <groupId>com.fasterxml.jackson.coregroupId>
  <artifactId>jackson-annotationsartifactId>
  <version>${jackson-annotations-version}version>
dependency>
<dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-databindartifactId>
    <version>${jackson.version}version>
  dependency>

SpringBoot中使用的话引入web依赖,就直接引入了Jackson

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

依赖如下:
使用 Jackson 操作 JSON 数据_第1张图片

2. 简单使用

Jackson提供了三种JSON的处理方式。分别是数据绑定JSON树模型流式API。下面分别介绍这三种方式。

2.1. 数据绑定

import lombok.Data;
@Data
public class Student {
   
    private Long id;
    private String name;
    private Integer age;
    private String sex;
    private String[] interest;
}
public class Test {
   
    public static void main(String[] args) throws IOException {
   
        Student student = new Student();
        student.setId(1L);
        student.setName("zhangsan");
        student.setAge(20);
        student.setInterest(new String[]{
   "music", "coding"});

        ObjectMapper mapper = new ObjectMapper();
        //测试代码......
    }
}
2.1.1. JavaBean 转 JSON 字符串
String studentStr = mapper.writeValueAsString(student);
System.out.println(studentStr);
//{"id":1,"name":"zhangsan","age":20,"sex":null,"interest":["music","coding"]}
2.1.2. JSON 字符串转 JavaBean
Student stu = mapper.readValue(studentStr, Student.class);
System.out.println(stu);
//Student(id=1, name=zhangsan, age=20, sex=null, interest=[music, coding])
2.1.3. JSON 字符串转 Map 集合
//对泛型的反序列化,使用TypeReference可以明确的指定反序列化的类型。
//import com.fasterxml.jackson.core.type.TypeReference;
Map<String, Object> map = mapper.readValue(studentStr, new TypeReference<Map<String, Object>>(){
   });
System.out.println(map);
//{id=1, name=zhangsan, age=20, sex=null, interest=[music, coding]}
2.1.4. JavaBean 写入到文件
//写到文件
mapper.writeValue(new File("/json.txt"), student);
//从文件中读取
Student student1 = mapper.readValue(new File("/json.txt"), Student.class);
System.out.println(student1);
//Student(id=1, name=zhangsan, age=20, sex=null, interest=[music, coding])
2.1.5. JavaBean 转字节数组
//写为字节流
byte[] bytes = mapper.writeValueAsBytes(student);
//从字节流读取
Student student2 = mapper.readValue(bytes, Student.class);
System.out.println(student2);
//Student(id=1, name=zhangsan, age=20, sex=null, interest=[music, coding])

2.2. JSON 树模型

Jackson树模型结构,可以通过pathgetJsonPointer等进行操作,适合用来获取大JSON中的字段,比较灵活。缺点是如果需要获取的内容较多,会显得比较繁琐。

2.2.1. 构建 JSON 树模型
import com.fasterxml

你可能感兴趣的:(第三方库,jackson,json)