IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Jackson对应FastJson的JSONObject的对象JsonNode详解 -> 正文阅读

[大数据]Jackson对应FastJson的JSONObject的对象JsonNode详解

版权说明: 本文由博主keep丶原创,转载请注明出处。
原文地址: https://blog.csdn.net/qq_38688267/article/details/124614982

背景

??因公司要求,将项目中的FastJson移除,改为用Jackson;因此需要将代码中的JSONObject相关操作替换成Jackson中的对象:JsonNode
?

FastJson对应的Jackson相关对象/操作

对象/操作FastJsonJackson
json对象JSONObjectObjectNode
json集合JSONArrrayArrayNode
创建json对象JSON.parseObject()ObjectMapper.readTree()
获取json对象中的json对象jsonObject.getJSONObject(<KEY>)jsonNode.with(<KEY>)
获取json对象中的集合对象jsonObject.getJSONArray(<KEY>)jsonNode.withArray(<KEY>)

??

JsonNode使用注意点

应定义全局ObjectMapper

??在解析json字符串时,FastJson可以直接通过静态类进行转换,Jackson转换json字符串需要用到ObjectMapper类,有些同学可能会每次需要转换时,就new一个ObjectMapper,这样是不可取的,一方面是性能问题,另一方面是ObjectMapper在初始化时,是可以定义很多配置的。

??因此一般情况下需要将ObjectMapper定义为一个bean,在需要用到的时候注入。如果项目上存在几种不同的序列化方式,则可以定义多个ObjectMapper的bean,这样在使用时会更方便。
??

jsonNode.with()和jsonNode.withArray()注意点

??调用这两个方法时,如果传入的Key不存在的话,会在这个Json对象中创建一个名字为Key的属性,值为{}(with方法)或[](withArray方法)。例:

// jsonNode的值假设为:{"a":123,"b":456}
ObjectNode c = jsonNode.with("c");
// 此时c的值为:{},jsonNode的值为:{"a":123,"b":456,"c":{}}
// jsonNode的值假设为:{"a":123,"b":456}
ArrayNode c = jsonNode.withArray("c");
// 此时c的值为:[],jsonNode的值为:{"a":123,"b":456,"c":[]}

??因此如果不是确定有这个字段的情况下,可以先用JsonNode.has()方法判断一下是否存在该字段。这个特点在一定情况下也可以妙用。
??

补充

ObjectMapper配置类样例:

    @Bean
    public ObjectMapper defaultMapperCreator() {
            ObjectMapper mapper = new ObjectMapper();
            mapper.registerModule(new JavaTimeModule()).registerModule(new ParameterNamesModule()).registerModules(ObjectMapper.findModules());
            //是否允许使用注释
//        mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
            //字段允许去除引号
//        mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
            //允许单引号
//        mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
            //允许转义字符
//        mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
            //严格重复检测
//        mapper.configure(JsonParser.Feature.STRICT_DUPLICATE_DETECTION, true);
            //不检测失败字段映射
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            //时间字段输出时间戳
            mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
            //时间输出为毫秒而非纳秒
            mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
            //空对象不出错
            mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
            //时间读取为毫秒而非纳秒
            mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
            //不输出空值字段
            mapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
            mapper.setTimeZone(systemTimeZone);

//        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

            return mapper;
     }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:10:56  更:2022-05-08 08:12:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:08:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码