Jackson介绍

介绍

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以上