使用 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 对象是一个数组,那么我们可以对上面的数组中转换后的对象进行遍历。

 

https://www.ossez.com/t/jackson-jsonnode/13724

posted @   huyuchengus  阅读(2043)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-09-08 Confluence 6 移动应用 app 限制和已知的问题
2020-09-08 Confluence 6 移动应用 app 管理员需要考虑什么
2020-09-08 Confluence 6 移动应用 app 你需要什么
2020-09-08 Confluence 6 移动应用 app 你需要什么
2020-09-08 Confluence 6 服务器移动应用 beta 版本
点击右上角即可分享
微信分享提示