Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Jackson – 将字符串转换为 JsonNode 对象

使用 Jackson – 将字符串转换为 JsonNode 对象

原创
作者头像
HoneyMoose
修改于 2021-09-08 02:54:08
修改于 2021-09-08 02:54:08
10.1K00
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:0
代码可运行

概述

本快速指南的主要目的是如何使用 Jackson 2 来将一个字符串转换为 JsonNode 对象。

JsonNode 定义在 com.fasterxml.jackson.databind.JsonNode 包中。

快速转换

可以使用下面的代码直接进行转换。

转换的方式也比较简单,在定义好 ObjectMapper 对象后,直接使用这个对象的 readTree 方法将输入的字符串转换为 JsonNode 对象。

考察下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 的方法。

请考察下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 的对定义来获得值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
除了FastJson,你也应该了解一下Jackson(一)
在上月末的时候收到一条关于fastjson安全漏洞的消息,突然想到先前好像已经有好多次这样的事件了(在fastjson上面)。关于安全方面,虽然中枪的机率微小,但是在这个信息越来越复杂的时代,安全性也变得越来越重要,就像DevSecOps的诞生,在软件交付的整个价值流中我们也需要注重安全这方面。当然我们现在不谈关于FastJson的优劣,因为我们本文的目标是让大家了解和掌握Jackson。
东溪陈姓少年
2020/08/06
1.2K0
【Java对象转换】003- Java 对象与 Yaml 互转
可参考本人其他文章:《【Spring Boot】003-yaml语法》 https://blog.csdn.net/qq_29689343/article/details/108545693 二、yaml语法
訾博ZiBo
2025/01/06
1280
fastxml 的 jackson helper类,便于json转换
发表于2017-06-302019-01-01 作者 wind /* * Copyright (c) 2017 西安才多信息技术有限责任公司。 * 项目名称:dev * 文件名称:JsonObjectUtils.java * 日期:17-6-30 上午8:58 * 作者:yangyan * */ package cn.firegod.common.utils.json; import cn.firegod.codegen.bean.ColumnMeta; import com.fas
前Thoughtworks-杨焱
2021/12/07
1.2K0
【安全研究】Jackson 学习笔记
Jackson框架是基于Java平台的一套数据处理工具,被称为"最好的Java Json解析器",目前Jackson主要有1.x和2.x两个分支版本,其中1.x的类库中包命名以org.codehaus.jackson.xxx开头,2.x类库中包命令com.fastxml.jackson.xxx开头,Jackson框架包含以下3个核心库:
Al1ex
2023/03/29
1.9K0
【安全研究】Jackson 学习笔记
高效JSON解析方案
JSON是常用的数据编码格式,在从海量JSON格式字符串数据中解析出所需值常常是计算的性能瓶颈,在大数据实时离线场景尤为常见。本文阐述一种高效解析JSON的方案和实现,相比较于jackson,在公司场景应用中,性能平均提升50%+。
一叶落知秋
2023/01/14
9850
高效JSON解析方案
7. Jackson用树模型处理JSON是必备技能,不信你看
上篇文章 体验了一把ObjectMapper在数据绑定方面的应用,用起来还是蛮方便的有木有,为啥不少人说它难用呢,着实费解。我群里问了问,主要原因是它不是静态方法调用,并且方法名取得不那么见名之意......
YourBatman
2020/08/25
1.9K0
7. Jackson用树模型处理JSON是必备技能,不信你看
json字符串与Object、List、Map的互转工具类
package com.cq2022.zago.base.util; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.Map; import org.codehaus.jackson.JsonFactory; import org.codehaus.ja
执笔记忆的空白
2020/12/25
1.7K0
Java 中 Jackson 的 readTree
在一些新的项目中可能会使用 yaml 这种格式,但大部分项目目前都还是在使用 JSON 数据格式来进行数据交换。
HoneyMoose
2022/01/07
1.2K0
Java 中 Jackson 的 readTree
解决 Cannot deserialize instance of java.lang.String out of START_OBJECT token 错误记
最近在代码迁移过程中,遇到了 JSON 解析失败的问题。具体表现为出现 "Cannot deserialize instance of java.lang.String out of START_OBJECT token" 错误。经过仔细研究和调试,发现问题的根源在于之前使用的 fastjson 转换库被替换为 jackson 后无法正确读取数据。
高久峰
2024/02/23
3.5K0
放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
在上篇《经过多方调研,最终还是决定禁用FastJson!》中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上比较主流,Spring Boot默认绑定的JSON类库:Jackson。
程序新视界
2021/03/02
3.9K0
JsonNode、JsonObject常用方法[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158330.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
2.1K0
Jackson详解
其中 jackson-databind内部依赖了jackson-annotations与ackson-core,故只导入jackson-databind即可
冬天vs不冷
2025/01/21
2250
Jackson详解
Jackson快速入门
Java生态圈中有很多处理JSON和XML格式化的类库,Jackson是其中比较著名的一个。虽然JDK自带了XML处理类库,但是相对来说比较低级,使用本文介绍的Jackson等高级类库处理起来会方便很多。
乐百川
2019/05/29
3.3K0
Jackson快速入门
Spring Cloud 入门手册
Spring Cloud 是一系列框架的集合。他利用 SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 SpringBoot 的开发风格做到一键启动和部署。Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 SpringBoot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
用户11332765
2024/10/28
2390
Spring Cloud 入门手册
Jackson: java.util.LinkedHashMap cannot be cast to X
本文翻译自:https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast
翎野君
2023/05/12
2.5K0
Jackson: java.util.LinkedHashMap cannot be cast to X
Apache httpClient+Jackson学习笔记
HTMLUnit可以用来做爬虫的。Jsoup比他跟简洁。使用python语言进行爬虫.开箱即用。
全栈程序员站长
2022/06/30
2.5K0
Apache httpClient+Jackson学习笔记
Jackson用法详解
Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。
三分恶
2020/07/16
15.6K0
Jackson,最牛掰的 Java JSON 解析器
在当今的编程世界里,JSON 已经成为将信息从客户端传输到服务器端的首选协议,可以好不夸张的说,XML 就是那个被拍死在沙滩上的前浪。
沉默王二
2020/12/15
1.9K0
解决:JSON parse: Cannot deserialize value of type ‘XXX‘ from Array value (token `JsonToken.START_ARRRA
问题的核心在于试图将JSON数据中的数组值反序列化为类型‘XXX’,然而,由于数据结构不匹配,系统无法正常完成此操作。这可能是由于JSON数据的结构与所期望的目标类型之间存在差异,导致解析失败。
默 语
2024/11/20
9950
jackson学习之三:常用API操作
本文是《jackson学习》系列的第三篇,前面咱们学习了jackson的低阶API,知道了底层原理,本篇开始学习平时最常用的基本功能,涉及内容如下:
程序员欣宸
2022/05/06
6170
jackson学习之三:常用API操作
相关推荐
除了FastJson,你也应该了解一下Jackson(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验