分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

FasterXML/jackson-databind

开发工具

把 JSON 等数据格式映射为 Java POJO,或以树模型、流式方式读写的通用数据绑定库。

3,755
1,541
Java
Apache-2.0
创建于 14 年前

jackson-databind 是 Jackson 在 Java 中的通用数据绑定与树模型层,建立在流式 parser/generator 和注解包之上,把数据映射为普通 Java 对象或可修改的 JsonNode 树。它最适合需要以类型化模型读写 JSON 结构数据的 JVM 服务。它并不硬绑定 JSON:只要有对应的 parser/generator 实现,也能处理其他格式,只是不少类名仍带 JSON README。

三种处理方式

核心入口是 ObjectMapper,创建一次后复用。它既能把文件、URL 或字符串读成 POJO,也能把对象写成文件、字节或字符串。第二条路径是树模型,适合结构高度动态、或文档只有部分能映射到 Java 类的场景:先读成 JsonNode,再遍历、修改,或把子节点转成具体类型。第三条路径直接暴露流式 parser 和 generator,适合需要精细控制读写过程、而不是整对象绑定的情况 README。

同一个对象还支持通过 convertValue 做 POJO 之间的转换,跳过中间的 JSON 文本;作者称这是更高效的中间表示,并给出 List 转数组、POJO 转 Map、Base64 解码等例子 README。

配置与错误处理

绑定行为通过 builder 配置的特性控制,例如缩进输出、空 Bean 是否报错、未知属性处理、日期是否写成时间戳,以及是否允许注释、单引号等非标准 JSON 输入 特性文档。配套注解包可以改名(@JsonProperty)、忽略字段,用 @JsonCreator 选择构造器或工厂方法;也可以用 @JsonPOJOBuilder 配合 Builder 模式反序列化 README。

3.1+ 提供问题收集式读取,把多个类型转换错误和未知属性错误汇总到一个 DeferredBindingException,而不是遇到第一个就停止。这是尽力而为:文档结构损坏仍会立即失败;失败字段会带默认值;只要收集到问题,就不会返回部分结果。默认上限是 100 个问题,可按 reader 配置,作者说明该上限用于防止超大坏负载 README。

要求与边界

2.x 要求 JDK 8,3.x 要求 JDK 17。Android 方面,2.14–2.19 要求 SDK 26+,3.0 要求 SDK 34+。Maven 或 Gradle 会自动带入 jackson-core 和 jackson-annotations;若构建工具不自动解析依赖,则需显式加入这两个 jar。该 jar 同时是 OSGi bundle,从 2.10 起还包含 JPMS 模块定义 README。

jackson-databind 属于核心组件,核心组件只允许依赖受支持 JDK 的方法以及另外两个核心包;需要其他库的功能应做成单独构建的 Jackson 模块 README。项目采用 Apache-2.0 许可 Apache License 2.0,开发分为活跃的 3.x 线和仍在维护的 2.x 分支,因此主版本同时决定包名和运行时基线 README。仓库本身托管 3.x 源码;2023 年一次由扫描器触发的 CVE 争议曾在 Hacker News 上讨论,有评论称作者认为该 CVE 应被撤销,但数据库更新滞后 HN 讨论。

本文由 AI 根据项目 README 生成,更新于 2026年10月30日,以项目官方文档为准。

Hacker News 讨论

Disputed Jackson-databind CVE Causing Disruption
▲ 4 · 2 条评论 · 2023年6月28日
Jackson-bind Block yet another gadget type (CVE-2019-12814)
▲ 1 · 1 条评论 · 2019年7月21日