介绍
Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。
从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。
Spring MVC 的默认 json 解析器便是 Jackson
Spring Boot 内置了jackson来完成JSON的序列化和反序列化操作,所以不需要添加依赖
优点
- 所依赖的 jar 包较少 ,简单易用。
- 解析大的 json 文件速度比较快
- 占用内存比较低,性能比较好
- 灵活的 API,可以很容易进行扩展和定制。
分支:1.x和2.x
Jackson有两个主要的分支:
- 1.x分支,处于维护模式,只发布bug修复版本(最近一次发布于Jul, 2013)
- 2.x是正在开发的版本(持续更新升级中,2.0.0发布于Mar, 2012)
注意:这两个主要版本使用不同的Java包名和Maven GAV,因此它们并不相互兼容,但可以和平共存。一个项目可以同时依赖于这两个版本是没有冲突的。这是经过设计而为之,选择这种策略是为了更顺利地从1.x进行迁移2. x
说明:现在都2020年了,1.x可以毫不客气的说已经淘汰了(除了非常老的项目还在用),因此针对1.x版本本专栏不会有任何涉猎。
三大核心模块
jackson-core,核心包,提供基于”流模式”解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
jackson-annotations,注解包,提供标准注解功能;
jackson-databind ,数据绑定包, 提供基于”对象绑定” 解析的相关 API ( ObjectMapper ) 和”树模型” 解析的相关 API (JsonNode);基于”对象绑定” 解析的 API 和”树模型”解析的 API 依赖基于”流模式”解析的 API。
一句话解释: jackson-core提供的是很低级的API,使用复杂,jackson-databind使用更加简单
Jackson-databind的安全漏洞
在2.9.9之前的FasterXML jackson-databind 2.x中发现了一个问题。为外部公开的JSON端点启用默认键入(全局或特定属性)时,该服务在类路径中具有mysql-connector-java jar(8.0.14或更早版本),并且攻击者可以托管精心设计的MySQL服务器可以访问服务器,攻击者可以发送精心设计的JSON消息,允许他们读取服务器上的任意本地文件。这是因为缺少com.mysql.cj.jdbc.admin.MiniAdmin验证。
解决:
升级到2.9.9.1以上