FasterXML/jackson-databind
GitHub: FasterXML/jackson-databind
Jackson 数据处理器的核心数据绑定包,实现 JSON 与 Java 对象之间高效的双向序列化与反序列化。
Stars: 3737 | Forks: 1494
# 概述
本项目包含通用的数据绑定功能
以及 [Jackson Data Processor](../../../jackson) 的树模型。
它基于 [Streaming API](../../../jackson-core)(流式解析器/生成器)包构建,
并使用 [Jackson Annotations](../../../jackson-annotations) 进行配置。
项目采用 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) 授权。
虽然 Jackson 最初的使用场景是 JSON 数据绑定,但现在只要存在解析器和生成器实现,它也可以用于读取以其他数据格式编码的内容。
尽管对 JSON 格式并没有实际上的硬性依赖,但许多地方的类名中仍使用了“JSON”一词。
## 状态
| 类型 | 状态 |
| ---- | ------ |
| 构建 (CI) | [](https://github.com/FasterXML/jackson-databind/actions/workflows/main.yml) |
| 构件 | [](https://central.sonatype.com/artifact/tools.jackson.core/jackson-databind) |
| OSS 赞助 | [](https://tidelift.com/subscription/pkg/maven-com-fasterxml-jackson-core-jackson-databind?utm_source=maven-tools-jackson-core-jackson-databind&utm_medium=referral&utm_campaign=readme) |
| Javadocs | [](https://javadoc.io/doc/tools.jackson.core/jackson-databind) |
| 代码覆盖率 (3.x) | [](https://codecov.io/github/FasterXML/jackson-databind?branch=3.x) |
| OpenSSF 评分 | [](https://securityscorecards.dev/viewer/?uri=github.com/FasterXML/jackson-databind) |
# 获取它!
## Maven
此包的功能包含在 Java 包 `tools.jackson.databind`(针对 Jackson 3.x)中,可以通过以下 Maven 依赖使用:
```
...
3.0.0
...
...
tools.jackson.core
jackson-databind
${jackson.version}
...
```
该包还依赖于 `jackson-core` 和 `jackson-annotations` 包,但在使用 Maven 或 Gradle 等构建工具时,依赖会自动包含在内。
不过,您可能需要使用 [jackson-bom](../../../jackson-bom) 来确保依赖版本的兼容性。
如果您使用的构建工具无法通过项目的 `pom.xml` 处理依赖,则需要手动下载并显式包含这两个 jar 包。
## 非 Maven 依赖解析
对于不会自动从 Maven 仓库解析依赖的用例,您仍然可以从 [Central Maven repository](https://repo1.maven.org/maven2/tools/jackson/core/jackson-databind/) 下载 jar 包。
Databind jar 也是一个功能完整的 OSGi bundle,具有正确的导入/导出声明,因此可以直接在 OSGi 容器中使用。
Jackson 2.10 及更高版本包含 `module-info.class` 定义,因此该 jar 也是一个标准的 Java Module (JPMS)。
Jackson 2.12 及更高版本包含额外的 Gradle 6 Module Metadata,以便与 Gradle 进行版本对齐。
## 兼容性
### JDK
Jackson-databind 包的基本 JDK 要求如下:
* 2.x 版本需要 JDK 8
* 3.x 版本需要 JDK 17
### Android
由于 Jackson 2.13 才添加了兼容性检查器,以下列表并不完整。
* 2.14 - 2.19:Android SDK 26+
* 3.0:Android SDK 34+
有关 Android SDK 版本与 Android 发布名称的对应信息,请参见 [https://en.wikipedia.org/wiki/Android_version_history](https://en.wikipedia.org/wiki/Android_version_history)
# 使用它!
更全面的文档可以在 [Jackson-docs](../../../jackson-docs) 仓库以及本项目的 [Wiki](../../wiki) 中找到。
但这里有一些简短的入门教程,按推荐的阅读顺序排列。
## 1 分钟教程:POJO 与 JSON 互转
最常见的用法是获取一段 JSON,并从中构造出一个 Plain Old Java Object ("POJO")。让我们从这里开始。像这样一个简单的包含 2 个属性的 POJO:
```
// Note: can use getters/setters as well; here we just use public fields directly:
public class MyValue {
public String name;
public int age;
// NOTE: if using getters/setters, can keep fields `protected` or `private`
}
```
我们需要一个 `tools.jackson.databind.ObjectMapper` 实例用于所有数据绑定,所以让我们构造一个:
```
// With default settings can use
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
// But if configuration needed, use builder pattern:
ObjectMapper mapper = JsonMapper.builder()
// configuration
.build();
```
默认实例对我们的使用来说已经足够了——稍后我们将学习如何在必要时配置 mapper 实例。用法很简单:
```
MyValue value = mapper.readValue(new File("data.json"), MyValue.class);
// or:
value = mapper.readValue(new URL("http://some.com/api/entry.json"), MyValue.class);
// or:
value = mapper.readValue("{\"name\":\"Bob\", \"age\":13}", MyValue.class);
```
如果我们想写入 JSON,我们执行相反的操作:
```
mapper.writeValue(new File("result.json"), myResultObject);
// or:
byte[] jsonBytes = mapper.writeValueAsBytes(myResultObject);
// or:
String jsonString = mapper.writeValueAsString(myResultObject);
```
到目前为止一切都还好吧?
## 3 分钟教程:泛型集合,树模型
除了处理简单的 Bean 风格 POJO 之外,您还可以处理 JDK 的 `List`、`Map`:
```
Map
scoreByName = mapper.readValue(jsonSource, Map.class);
List names = mapper.readValue(jsonSource, List.class);
// and can obviously write out as well
mapper.writeValue(new File("names.json"), names);
```
只要 JSON 结构匹配,且类型简单即可。
如果您的值是 POJO,您需要指明实际类型(注意:对于具有 `List` 等类型的 POJO 属性,这并不是必需的):
```
Map results = mapper.readValue(jsonSource,
new TypeReference标签:Jackson, JSON, JS文件枚举, 后台面板检测, 域名枚举, 序列化, 数据绑定