Jackson介绍 作者:马育民 • 2020-08-05 15:26 • 阅读:10203 # 介绍 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以上 原文出处:http://malaoshi.top/show_1EF61Bp7UvwW.html