Jackson 2.x 系列【1】概述

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

本系列Jackson 版本 2.17.0

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

文章目录

    • 1. 前言
    • 2. 什么是 JSON
    • 3. 常用 Java JSON 库
    • 4. Jackson
      • 4.1 简介
      • 4.2 套件
      • 4.3 模块
        • 4.3.1 核心模块
        • 4.3.2 数据类型模块
        • 4.3.3 Jackson JAX-RS
        • 4.3.4 数据格式模块
        • 4.3.5 JVM 模块
        • 4.3.6 其他模块
        • 4.3.7 Jackson jr
      • 4.4 模式支持

1. 前言

本篇文档重点笔记:😀😀😀记住Jackson 包含的三大核心模块😀😀😀

对于Java编程人员来说,相信大家对JSON已经很熟悉了,或多或少都用过FastjsonJacksonJSON处理工具。

大多数开发场景下,涉及到JSON时,大部分成熟的框架已经帮我们封装好了,比如Spring MVCSpring Boot,除了需要在业务代码中调用简单API进行JSON转换外,其他时候并不太涉及。所以这也导致了我们对JSON工具的高级用法、执行原理并不太熟悉。所以有必要深入了解一下相关Json工具,以便于我们在性能优化高级扩展时能够从容应对。

本系列学习的对象是Jackson,从基础入门到深入剖析,相信通过本栏的学习,能够帮助大家在技术方面更上一层楼。

2. 什么是 JSON

JSON的全称是JavaScript Object NotationJS对象图谱),来源于JavaScript中的对象表示法,是一种轻量级的数据交换格式

XML作为可扩展标记语言,用于存储和传输数据,于1998年由W3C发布XML 1.0标准,并在之后陆续发布了其他版本。在编程中,XML常用于配置文件、数据交换,但是其存在语法复杂冗余文件体积较大等缺点。

2001年,JSON 之父Douglas Crockford基于JavaScript对象字面量语法,提出了JSON数据交换格式,因其易于阅读编写易于机器解析生成轻量级等特点,目前已成为Web领域数据交换格式的应用标准。

JSON其实也就是字符串, 只不过元素会使用特定的符号标注。比如

{"a": 1, "b": [1, 2, 3]}

在上述示例中

  • {} 双括号表示对象
  • [] 中括号表示数组
  • ""双引号内是属性或值
  • : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

3. 常用 Java JSON 库

在JSON 官网中,可以看到几乎所有的编程语言都提供了对JSON的支持,基于JavaJSON库也有很多种:
在这里插入图片描述
国内最常用的Java JSON 库有以下几种:

  • Gson:由Google公司开源维护
  • FastjsonJava编写的高性能的JSON库,由阿里巴巴公司开发,号称其独创的算法解析速度超过所有JSON
  • Jackson : 基于Java 处理 JSON 格式数据的一套类库(也支持其他格式)

4. Jackson

4.1 简介

GitHub地址
官方文档地址

Jackson 是一个由FasterXML组织开源维护的一个基于Java JSON库。

Jackson具有轻量级高性能易用性无其他依赖(仅依赖JDK)等特点,已经成为了很多JAVA框架的默认JSON库,目前应该算是最受欢迎的JSON 工具。

Jackson包含了两个主要版本,1.x已经停止维护,2.x是当前积极开发的版本,最新稳定版本是于20240314日发布的2.17.0

4.2 套件

Jackson提供了一套适用于Java的数据处理工具,包括:

  • JSON解析 & JSON生成库
  • 数据绑定库,处理POJOJSON之间的互相转换
  • 其他数据格式库,用于处理AvroBSONCBORCSVSmileJava PropertiesProtobufTOMLXMLYAML中编码的数据
  • 大数据集格式库,如GuavaJodaPCollections

4.3 模块

Jackson包含了很多模块,大部分都是由Jackson团队开发维护,也有一些是由社区成员提供。

4.3.1 核心模块

Jackson核心模块是其他扩展模块构建的基础,包含以下三个核心模块:

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

在这里插入图片描述

4.3.2 数据类型模块

数据类型模块在ObjectMapper.registerModule()中进行注册,并通过添加序列化反序列化功能对各种常用Java数据类型进行支持,然后使用Jackson数据绑定包中的ObjectMapper/ObjectReader/ObjectWriter可以读写这些类型。

Jackson核心团队直接维护的数据类型模块:

  • 标准集合数据类型模块:
    • jackson-datatype-eclipse-collections:支持Eclipse集合(2.10版本)
    • jackson-datatype-guava:支持guava数据类型
    • jackson-datatype-hppc:支持High-Performance Primitive Containers
    • jackson-datatype-pcollections:支持PCollections数据类型(2.7版本)
  • Hibernate:支持Hibernate功能(延迟加载、代理)
  • Java 8模块:通过3个独立的模块支持JDK 8功能和数据类型
    • jackson-module-parameter-names:增加了对使用新的JDK8功能的支持,能够访问构造函数和方法参数的名称,从而允许省略@JsonProperty
    • jackson-datatype-jsr310:支持JDK8新增的JSR310时间API
    • jackson-datatype-jdk8:支持除日期/时间类型之外的JDK 8数据类型,包括Optional
  • Joda数据类型
    • jackson-datatype-joda:支持 Joda-Time日期/时间库数据类型的类型
    • jackson-datatype-joda-money:支持 Joda-Money数据类型,例如MoneyCurrencyUnit
  • JSON-Pjson processing):
    • jackson-datatype-jakarta-jsonp:支持jakarta.json中新的JSON-P类型(2.12.2版本)
    • jackson-datatype-jsr353:支持jakarta.json中旧的JSON-P类型
  • jackson-datatype-json-org:支持org.json库中的类型,如JSONObjectJSONArray

Jackson核心团队没有直接维护的其他模块:

  • jackson-datatype-bolts:支持Yandex-bolts集合类型定义的读/写类型(受函数编程启发的不可变集合)
  • jackson-datatype-commons-lang3:用于Apache commons Lang v3的类型
  • jackson-datatype-money:支持Java money
  • vavr-jackson:支持VAVRJava™8及以上版本的功能丰富且独立的功能编程)
  • jackson-datatype-json-lib:支持son-lib定义的类型
  • jackson-datatype-jts:支持GeoJSON 中的JTS Geometry
  • jackson-lombok:支持lombok
  • jackson-datatype-mongo:支持MongoDB 类型(已有替代方案)
  • jackson-module-objectify:支持Objectify数据类型
  • jackson-datatype-protobuf:支持由HubSpot开发的标准Java protobuf库定义的数据类型
  • tinytypes-jacksonTinyTypes集成的Jackson
  • jackson-datatype-vertx:支持Vert.x中用于用于读/写JsonObject 对象
4.3.3 Jackson JAX-RS

Jackson JAX-RS添加了对JAX-RS实现(如JerseyRESTeasyCXF)的数据格式支持,提供实现MessageBodyReaderMessageBodyWriter,目前支持的格式包括JSONSmileXMLYAMLCBOR

4.3.4 数据格式模块

数据格式模块支持JSON以外的数据格式,它们中的大多数只是实现流式API抽象,这样数据绑定组件就可以按原样使用,有些提供额外的数据绑定级别功能来处理模式之类的事情。

目前,以下数据格式模块是完全可用和受支持的:

  • Avro:支持Avro数据格式,具有流式实现以及对Avro架构的额外数据绑定级别支持
  • CBOR:支持CBOR数据格式(二进制JSON变体)
  • CSV:支持逗号分隔的值格式
  • Ion:支持Amazon Ion二进制数据格式(类似CBORSmile,即二进制JSON
  • Java Properties :使用隐含表示法创建嵌套结构(默认为点式,可配置),在序列化时类似地进行扁平化
  • Protobuf :支持类似Avro
  • Smile:支持Smile(二进制JSON),100%API/logical模型通过流式API兼容,不更改数据绑定
  • TOML:支持TOML,同时支持流媒体和数据绑定实现
  • XML:支持XML,提供流和数据绑定实现,类似于JAXB的“代码优先”模式(不支持XML模式优先”,但可以使用JAXB bean
  • YAML:支持YAML,与JSON类似,完全支持简单的流式实现

还有其他数据格式模块,由Jackson核心团队以外的开发人员提供:

  • BEncode:支持读取/写入 BEncodeBitTorrent格式)编码数据
  • bson4jackson:增加了对BSON数据格式的支持
  • EXIficient EXIficient中支持高效的XML交换
  • jackson-dataformat-msgpack :支持MessagePack格式
  • HOCON:支持HOCON格式
  • Rison::支持Rison
4.3.5 JVM 模块

除了 Java还支持基于JVM的其他语言:

  • Kotlin :处理原生类型的Kotlin
  • Scala :处理原生Scala类型,目前Scala 2.9支持到Jackson 2.3Scala 2.10支持到Jackson 2.11
4.3.6 其他模块

FasterXML团队的其他完全可用的模块包括:

  • Afterburner:使用字节码生成将数据绑定速度提高30-40%,以取代对字段访问、方法/构造函数调用使用反射
  • Guice:允许来自Guice注入器(和基础的Guice注解)的注入值的扩展,而不是标准的@JacksonInject
  • JAXB Annotations:允许使用JAXB注解作为标准Jackson注解的替代
  • Mr Beantype materialization支持(动态生成实现类,不生成源代码)
  • OSGi:允许通过标准的@JacksonInject注解从OSGi注册表注入值
  • Paranamer:用于自动计算创建者(构造函数、工厂方法)参数名称的微小扩展,以避免必须指定@JsonProperty
4.3.7 Jackson jr

Jackson jr建立在Jackson Streaming API上,但不依赖于数据绑定。因此,它的大小(jar和运行时内存使用量)要小得多,其API非常紧凑,常应用于移动端。

4.4 模式支持

Jackson除了使用编码的方式来读取/写入 JSON和其他格式数据外,还支持外部模式生成。其中一些功能包含在上述数据格式扩展中,但是也有许多独立的Schema工具,例如:

  • jackson-jsonschema-ant-task
  • jsonschema-generator
  • mbknor-jackson-jsonSchema
  • jackson-module-jsonSchema

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prompt开发生命周期

1.定义任务场景和成功标准 任务场景可分为简单任务:实体抽取、qa等 复杂任务:代码生成、创意写作等 在定义任务后,就要定义模型实现该任务的成功标准: 模型表现和准确率;延迟;价格。 2.开发测试用例 多…

Vue2(七):超详细vue开发环境搭建(win7),nodejs下载与安装,安装淘宝镜像(报错已解决),配置脚手架

一、安装node.js 本来想粗略写一下的,但是搭建脚手架的时候,遇到了很多问题,浪费快两天时间,记录一下自己的解决办法希望对你们有帮助! 1.下载nodejs 安装包下载链接【CNPM Binaries Mirror】 下载我划线的这个&am…

代码随想录算法训练营第25天| 216.组合总和III、17.电话号码的字母组合

216.组合总和III 题目链接:组合总和III 题目描述:找出所有相加之和为 n **的 k ****个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c…

2024热门外贸独立站wordpress模板

工艺品wordpress外贸主题 简约大气的wordpress外贸主题,适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377 日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题,适合做日用百货的外贸公司搭建跨境电商网站使用。 …

Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 QSpinBox组件-窗口背景不透明调节器 2.2 DoubleSpinBox 组件-来调节程序窗口的整体大小 2.3 QTimeEdit、QDateEdit、QDateTimeEdit组件-编辑日期和时间的小部件 Input Widgets部件部件较多,将分为三…

centos上安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图,主要功能为 1、编写一个serviceSms短信服务类; 2、需要用到短信的地方统一调用基建层的服务即可; 3、可以随意切换、增加短信厂商,不需要更改场景代码,只需要更改application.yml 里面…

13个外贸业务员常用邮件模板-订单沟通

除了报价后跟进客户,我们在实际工作过程当中也会遇到很多非常规性的情况,需要和客户及时沟通处理。 以下是13个外贸业务员常用邮件模板-订单沟通:你可以根据自己的行业、公司、产品情况以及自身的经验判断进行调整和完善,做出一套…

水下蓝牙耳机哪个牌子好?业界公认四大高口碑游泳耳机

在这个活力四溢的时代,人们对于健康生活方式的追求愈发热切,游泳作为一项兼顾休闲与健身的运动,深受大众喜爱。在水下世界,音乐的陪伴能增添游泳的乐趣,一款好的水下蓝牙耳机成为游泳爱好者们的新宠。 近年来&#xff…

DZY-212中间继电器 DC 220V 板后接线 面板安装 JOSEF约瑟

系列型号: DZY-200系列中间继电器;DZY-201中间继电器; DZY-202中间继电器;DZY-203中间继电器; DZY-204中间继电器;DZY-205中间继电器; DZY-206中间继电器;DZY-207中间继电器; DZY-20…

openEuler 22.03(华为欧拉)一键安装 Oracle 19C(19.22) 数据库

前言 Oracle 一键安装脚本,演示 openEuler 22.03 一键安装 Oracle 19C 单机版过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:Shell脚本安装Oracle数据…

ssh免密登陆更换目标主机后无法连接

在进行hadoop分布式环境搭建时(三台机,master,slave1,slave2),后期slave2系统出现问题,更换新机后,master与slave2文件传输失败: 以为是秘钥过期的问题,更换…

走出大模型部署新手村!小明这样用魔搭+函数计算

作者:拓山 前文介绍了魔搭 ModelScope 社区模型服务 SwingDeploy 服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算,当选择模型并部署时,系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源&#xff0c…

c++多长时间会被Python或者其他语言取代?

c多长时间会被Python或者其他语言取代? 如果不考虑市场因素,C#今天就可以取代C。 自.NET跨平台至今,C能做的工作,C#都能做了,且性能差别不大。 在C最有优势的嵌入式UI方面,C#可以拿出Avalonia替代QT。用 …

9.16单词拆分(LC139-M)

算法: 这道题可以用回溯,但是可能会超时 可以用背包问题解决: 物品:单词 背包:字符串: 单词能否组成字符串s,就是问物品能不能把背包装满。 拆分时可以重复使用字典中的单词,就…

M4芯片和核心板应用于工业网关解决方案

在工业级应用中,M4芯片和核心板凭借其丰富的接口和强大的性能及高性价比特点,已经成为众多工业设备中的首选。本文将从M4芯片和核心板的特点、应用场景、以及其在工业级网关中的应用等方面进行详细阐述。 一、M4芯片和核心板的特点 M4芯片和核心板以其…

nfs介绍与配置

NFS 1. nfs简介 nfs特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服…

camelot pdf提取表格实践(记录)

参考: 巧用Python的camelot库批量提取PDF发票信息 关于文本pdf的表格抽取 AttributeError: module ‘camelot‘ has no attribute ‘read_pdf‘及类似问题解决办法 camelot 参数 https://blog.csdn.net/INTSIG/article/details/123000010 报错解决: Mod…

美团大规模KV存储挑战与架构实践

KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量,并且保持着 99.995% 的服务可用性。在 DataFunSummit 2023 数据基础架构峰会上,我们分享了《美团大规模 KV 存储挑战与架构实践》,本文为演讲内容的整理…

探讨NLP对行业大量数据信息抽取的技术实现

在本文中,为了实现高效的信息抽取,我们采用了一个自主研发的多模态AI的大模型NLP平台。 这个平台的使用过程分为以下几个步骤: 数据收集:我们收集了与项目相关的100条数据样本,这些样本涵盖了各种商品描述&#xff0c…