1. 初识Jackson -- 世界上最好的JSON库(上)

简介: 1. 初识Jackson -- 世界上最好的JSON库(上)

一个工程仅需一个JSON库


Java的JSON库,你至少应该用过/听过这三种:Jackson、Gson、Fastjson。一个独立的工程,按照依赖最少原则,本应该only one JSON库是足矣的。但现状是:各位同仁可观察观察各自的项目,大都同时存在2种JSON库,亦或者3种甚至更多…


说明:在同一个工程内,同一功能若有多种实现,实属不好的现象。这会让管理起来显得混乱(譬如对日期的格式化就不方便做到统一),出口若有多个,想收口时就是个大难题了


作为一个合格的架构师/工程师,保持最简依赖(一致性依赖)是应该有的技术范,因为简单一致性它能带来很大的收益,道理很简单:两个Java程序员的沟通/协同效率,一定会比1个Java + 1个Python沟通效率高。


so what,我们应该选择哪一种JSON库呢?答案显而易见,那便是Jackson。因为它各个方面表现均非常优秀,是世界最流行、最好的JSON库。把Jackson作为工程唯一JSON库是有一丢丢门槛的(想想你为何使用Fastjson就知道啦),所以它来啦,祝你跨越此门槛,规范化使用,助你增加一项主流的硬核实力,这也是本专栏的最大意义所在。


Jackson是世界最好的JSON库


Jackson是一个简单的、功能强大的、基于Java的应用库。它可以很方便完成Java对象和Json对象(xml文档or其它格式)进行互转。Jackson社区相对比较活跃,更新速度也比较快。Jackson库有如下几大特性:


  • 高性能且稳定:低内存占用,对大/小JSON串,大/小对象的解析表现均很优秀
  • 流行度高:是很多流行框架的默认选择
  • 容易使用:提供高层次的API,极大简化了日常使用案例
  • 无需自己手动创建映射:内置了绝大部分序列化时和Java类型的映射关系
  • 干净的JSON:创建的JSON具有干净、紧凑、体积小等特点
  • 无三方依赖:仅依赖于JDK
  • Spring生态加持:jackson是Spring家族的默认JSON/XML解析器(明白了吧,学完此专栏你对Spring都能更亲近些了,一举两得)


版本约定:本专栏统一使用的版本号固定为2.11.0(2020-04发布),GAV如下:


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.11.1</version>
</dependency>


为了保持版本的统一性,后续的Spring Boot(2.3.0.RELEASE)/Spring Framework(5.2.6.RELEASE)使用的均为当前最新版本,因为它内置的jackson也恰好就是本专栏讲解的版本。


正文


细心的朋友从上面的groupId里可以看到:jackson它隶属于fasterxml这个组织。本着追本溯源的精神,可以稍微的了解了解这个组织:fasterxml官网 截图如下


image.png


简单翻译:FasterXML是Woodstox流的XML解析器、Jackson流的JSON解析器、Aalto非阻塞XML解析器以及不断增长的实用程序库和扩展家族背后的业务。


作为一个高度流行的开源库,这种官网页面应该刷新了你的认知吧。并不是它内容不多,而其实是它的详细介绍都发布在github上了,这便是接下来我们来认识它的主要渠道。


这种做法貌似已经成为了一种流行的趋势:越来越多的开源软件倾向于把github作为他们的Home Page了


fasterxml组织它直属的一级工程其实也有不少:


  1. com.fasterxml.jackson
  2. com.fasterxml.uuid
  3. com.fasterxml.woodstox


很显然,本专栏仅仅只会关注jackson工程,该工程便是该组织最出名且最最最为重要的部分。


官网介绍


了解一门新的技术,第一步应该就是看它的官网。上面已然解释了,fasterxml组织它把各工程的首页内容都托管在了github上,Jackson当然也不例外。Jackson官网 上对它自己有如下描述:


Jackson旧称为:Java(或JVM平台)的标准JSON库,或者是Java的最佳JSON解析器,或者简称为“Java的JSON”


从这名字就霸气外露了,NB得不行,足以见得它在JSON解析方面的地位和流行程度,当然主要是自信


更重要的是,Jackson是一套JVM平台的 数据处理(不限于JSON) 工具集:包括 一流的 JSON解析器/ JSON生成器、数据绑定库(POJOs to and from JSON);并且提供了相关模块来支持 Avro, BSON, CBOR, CSV, Smile, Properties, Protobuf, XML or YAML等数据格式,甚至还支持大数据格式模块的设置。


分支:1.x和2.x


Jackson有两个主要的分支:


  • 1.x分支,1.9.13。处于维护模式,只发布bug修复版本(最近一次发布于Jul, 2013)
  • 2.x是正在开发的版本(持续更新升级中,2.0.0发布于Mar, 2012)

注意:这两个主要版本使用不同的Java包名和Maven GAV,因此它们并不相互兼容,但可以和平共存。一个项目可以同时依赖于这两个版本是没有冲突的。这是经过设计而为之,选择这种策略是为了更顺利地从1.x进行迁移2. x


说明:现在都2020年了,1.x可以毫不客气的说已经淘汰了(除了非常老的项目还在用),因此针对1.x版本本专栏不会有任何涉猎。

活跃的2.x分支说明


目前2.x分支存在如下活跃的分支们:


  • 2.12:下一个小版本,目前正在开发中
  • 2.11:当前稳定版。积极维护的分支,会积极持续发布补丁
  • 2.10:上一个稳定的分支,没有停止维护仍会发布补丁
  • 2.9: 非活跃分支,只会发布微补丁了,虽然还活跃但活跃度较低
  • 其它2.x分支:只会发布重大安全补丁
  • master:主分支。下一个主要分支3.0正在快速开发中


说明:对于2.11.0和2.11.x这种小分支之间的区别,可以忽略



相关文章
|
4天前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
8 0
|
8天前
|
JSON fastjson 数据格式
使用jackson和fastjson实现list与json互转
使用jackson和fastjson实现list与json互转
14 4
|
13天前
|
存储 JSON JavaScript
Python教程:一文了解Python中的json库
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于人类阅读和编写,也易于计算机解析和生成。在Python中,JSON通常用于数据交换和存储,因为它与Python的字典和列表类型相似。
28 2
|
18天前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。
|
27天前
|
JSON 数据处理 数据安全/隐私保护
Ktor库的高级用法:代理服务器与JSON处理
Ktor库的高级用法:代理服务器与JSON处理
|
2月前
|
JSON 安全 JavaScript
Java一分钟之-JSON处理:Gson与Jackson库
本文对比介绍了Java中常用的两个JSON库Gson和Jackson。Gson以其简洁易用和自动序列化/反序列化功能受到青睐,而Jackson则以优异性能和丰富功能(如字段忽略、日期格式化)著称。文中通过代码示例展示了两者的基本用法,并讨论了常见问题及解决策略,包括时间格式处理、循环引用和类型匹配。在实际应用中,应根据性能需求、安全性和版本兼容性选择合适的库,并遵循最佳实践。
36 0
|
2月前
|
JSON 数据格式 索引
python之JMESPath:JSON 查询语法库示例详解
python之JMESPath:JSON 查询语法库示例详解
27 0
|
2月前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
33 2
|
2月前
|
JSON fastjson Java
Spring Boot Jackson 和Fast JSON 用哪个好啊 ?
【4月更文挑战第22天】
137 1
|
XML JSON Java
Jackson 框架,轻易转换JSON
Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
3013 0