Jackson 2.x 系列【2】生成器 JsonGenerator

18,495次阅读
没有评论

共计 3535 个字符,预计需要花费 9 分钟才能阅读完成。

有道无术,术尚可求,有术无道,止于术。

本系列 Jackson 版本 2.17.0

源码地址:https://gitee.com/pearl-organization/study-seata-demo

文章目录

    • 1. 前言
    • 2. 案例演示
      • 2.1 创建 JsonFactory
      • 2.2 创建 JsonGenerator
      • 2.3 写入操作
      • 2.4 查看文件

1. 前言

在上一篇我们了解过 Jackson 包含三大核心模块:

  • jackson-core:核心底层模块,定义了一些底层的流处理 API 和公共抽象类
  • jackson-annotations:标准注解模块,定义了标准的用于数据处理的相关注解
  • jackson-databind:数据绑定模块,依赖于上面两个模块,定义了用于数据绑定的高层API

其中 jackson-core 是核心中的核心,其他模块都需要引入,提供了底层的 Streaming API 和公共类,该模块中有三个非常重要的类:

  • JsonGeneratorJSON生成器,用于写入数据
  • JsonParserJSON解析器,用于读取数据
  • JsonFactoryJSON工厂类,用于创建JsonGeneratorJsonParser

2. 案例演示

当前存在一个 用户 POJO类,包含了用户基本信息、机构信息、角色信息。

机构对象:

public class Org {
    
    private Long id;
    
    private String orgName;
    
    private String address;
    
}

角色对象:

public class Role {
    
    private Long id;
    
    private String roleName;
    
    private String roleCode;
    
}

用户对象:

public class User {
    
    private Long id;
    
    private String name;
    
    private Integer age;
    
    private Org org;
    
    private ListRole> roleList;
    
}

要求使用 jackson-core 中的 API 将某个用户对象实例转为如下所示的JSON
Jackson 2.x 系列【2】生成器 JsonGenerator

2.1 创建 JsonFactory

首先需要引入 jackson-core 依赖:

        dependency>
            groupId>com.fasterxml.jackson.coregroupId>
            artifactId>jackson-coreartifactId>
            version>2.17.0version>
        dependency>

JsonFactoryJackson 最重要的一个工厂类,用于配置和构建JsonGeneratorJsonParser,其实例是线程安全的,配置后可重复使用,一般在应用中只使用一个全局共享的工厂实例即可。

JsonFactory可以使用以下两种方式构建:

        
        JsonFactory jsonFactoryByBuilder =JsonFactory.builder().build(); 
        JsonFactory jsonFactory = new JsonFactory(); 

2.2 创建 JsonGenerator

JsonGenerator是用于生成 JSON 内容的 API 的基类,它有很多实现子类:
Jackson 2.x 系列【2】生成器 JsonGenerator
JsonGenerator实例必须调用 JsonFactory 进行创建,JsonFactory提供了多种创建方法:

    
    public abstract JsonGenerator createGenerator(DataOutput out, JsonEncoding enc) throws IOException;
    
    public abstract JsonGenerator createGenerator(DataOutput out) throws IOException;
    
    public abstract JsonGenerator createGenerator(File f, JsonEncoding enc) throws IOException;
    
    public abstract JsonGenerator createGenerator(OutputStream out) throws IOException;
    
    public abstract JsonGenerator createGenerator(OutputStream out, JsonEncoding enc) throws IOException;
    
    public abstract JsonGenerator createGenerator(Writer w) throws IOException;

这里我们直接写入到文件中,并指定编码方式为UTF-8

        
        File file = new File("E:TDpearlstudy-jackson-demojackson-core-demosrcmainjavacompearljacksoncoredemofileuser.json");
        JsonGenerator jsonGenerator = jsonFactory.createGenerator(file, JsonEncoding.UTF8);

上面创建的 JsonGenerator 实例类型是UTF8JsonGenerator

Jackson 2.x 系列【2】生成器 JsonGenerator

2.3 写入操作

接下来我们就可以使用 JsonGenerator 对象进行写操作了,JSON字符串最外层都是一个大括号{},所以需要先写一个{

        
        
        jsonGenerator.writeStartObject();

当前 JSON 内容如下:

{ 

接着写基本数据类型的属性和值:

        
        jsonGenerator.writeNumberField("id", 1699632398490275840L); 
        jsonGenerator.writeStringField("name", "坤坤"); 
        jsonGenerator.writeNumberField("age", 18); 

当前 JSON 内容如下:

{"id":1699632398490275840,"name":"坤坤","age":18 

接着写对象类型的属性和值,首先写入属性值org,然后写入机构对象的属性、值:

        
        jsonGenerator.writeFieldName("org"); 
        jsonGenerator.writeStartObject(); 
        jsonGenerator.writeNumberField("id", 1699967647585800192L); 
        jsonGenerator.writeStringField("orgName", "阿里巴巴");
        jsonGenerator.writeStringField("address", "浙江杭州");
        jsonGenerator.writeEndObject(); 

当前 JSON 内容如下:

{"id":1699632398490275840,"name":"坤坤","age":18,"org":{"id":1699967647585800192,"orgName":"阿里巴巴","address":"浙江杭州"}

接着写对象集合:

        
        jsonGenerator.writeFieldName("roleList"); 
        jsonGenerator.writeStartArray(); 
        
        jsonGenerator.writeStartObject(); 
        jsonGenerator.writeNumberField("id", 1699972559514243072L); 
        jsonGenerator.writeStringField("roleName", "系统管理员");
        jsonGenerator.writeStringField("roleCode", "ROLE_ADMIN");
        jsonGenerator.writeEndObject(); 
        
        jsonGenerator.writeStartObject(); 
        jsonGenerator.writeNumberField("id", 1701893746586685440L); 
        jsonGenerator.writeStringField("roleName", "企业员工");
        jsonGenerator.writeStringField("roleCode", "ROLE_STAFF");
        jsonGenerator.writeEndObject(); 
        jsonGenerator.writeEndArray();

最后写一个结束符号 } 并关闭流:

       
        jsonGenerator.writeEndObject(); 
        jsonGenerator.close();

2.4 查看文件

查看生成的文件,可以看到成功写入JSON

在这里插入图片描述

原文地址: Jackson 2.x 系列【2】生成器 JsonGenerator

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-03发表,共计3535字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)