使用 Jackson – 将字符串转换为 JsonNode 对象
概述
本快速指南的主要目的是如何使用 Jackson 2 来将一个字符串转换为 JsonNode 对象。
JsonNode 定义在 com.fasterxml.jackson.databind.JsonNode 包中。
快速转换
可以使用下面的代码直接进行转换。
转换的方式也比较简单,在定义好 ObjectMapper 对象后,直接使用这个对象的 readTree 方法将输入的字符串转换为 JsonNode 对象。
考察下面的代码:
@Test
public void whenParsingJsonStringIntoJsonNode_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonString);
assertNotNull(actualObj);
}
低级别的转换
在有些情况下,你可能需要使用更加低级别的转换,比如说在转换的时候需要对一些输出参数进行设置。
那么你就需要先配置 Parser 了。
与前面的快速转换不同的是,在你 new 了一个新的 ObjectMapper 对象后,你需要从这个对象中获得 Factory。
然后再创建一个 Parser,最后再调用 readTree 的方法。
请考察下面的代码:
@Test
public void givenUsingLowLevelApi_whenParsingJsonStringIntoJsonNode_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getFactory();
JsonParser parser = factory.createParser(jsonString);
JsonNode actualObj = mapper.readTree(parser);
assertNotNull(actualObj);
}
JsonNode 的使用
当 JSON 字符串被处理成了 JsonNode 对象后,那我们可以使用 JSON Tree Model 来对转换后的 JSON 对象进行操作。
例如下面的代码,首先我们完成了字符串到 JSON 对象的转换,然后转换完成后,我们通过 K1 的对定义来获得值。
@Test
public void givenTheJsonNode_whenRetrievingDataFromId_thenCorrect()
throws JsonParseException, IOException {
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonString);
// When
JsonNode jsonNode1 = actualObj.get("k1");
assertThat(jsonNode1.textValue(), equalTo("v1"));
}
结论
在使用 fasterxml 的 jackson 包对 Json 数据操作之前,首先需要做的事情就是将输入的 String 或者文件或者不同的输入流转换为 JsonNode 对象。
后续的操作就是对 JsonNode 的对象进行操作了。
例如,上面我们的一个 JsonNode 对象是一个数组,那么我们可以对上面的数组中转换后的对象进行遍历。
「其他文章」
- 到底应不应该使用 lombok
- Java 8 开始新增的 Optional 类 - Optional 对象中的返回
- Fedora 上如何安装 gitea
- Ubuntu 安装 NTP 服务
- 群晖(Synology)NAS 安装 Mariadb 数据库启动错误
- 美东某 IoT 公司技术流程第一轮沟通就挂了
- Node 的 cross-env 模块
- Npm 安装提示 EUNSUPPORTEDPROTOCOL 错误
- 使用 Jackson – 将字符串转换为 JsonNode 对象
- 在 Discourse 中如何使用输入对话框
- IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性
- RedHat 8 时间同步和时区修改
- JDK 8 及其后续 JDK 中 Period 和 Duration
- POM 文件中 licenses 许可证的定义
- IntelliJ IDEA 如何显示提交输入的信息历史
- 前端工程师的 caniuse
- JavaScript 数组进行拼接的函数
- JavaScript 数组元素的一些操作
- 如何理解 Java 多线程
- JavaScript 中 Array map() 方法