当前位置: 首页 > news >正文

通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据

一.简介

今天同事有个需求,要把一个JSON字符串转换成一个树结构的数据并获取节点数据,鉴于自己不想写递归去转换,于是使用ObjectMapper和JsonNode类去实现。

二.依赖

pom文件引入依赖:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.6</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.6</version>
</dependency>

三.JSON字符串数据如下:

{"id":"1","name":"科技部门","parentId":"root","children":{"id":"2","name":"研发部门","parentId":"1","children":{"id":"3","name":"后端部门","parentId":"2","children":null}}
}

四.代码如下:

public static void main(String[] args) {String json = "{\n" +"   \"id\":\"1\",\n" +"    \"name\":\"科技部门\",\n" +"    \"parentId\":\"root\",\n" +"    \"children\":{\n" +"          \"id\":\"2\",\n" +"          \"name\":\"研发部门\",\n" +"          \"parentId\":\"1\",\n" +"          \"children\":{\n" +"             \"id\":\"3\",\n" +"             \"name\":\"后端部门\",\n" +"             \"parentId\":\"2\",\n" +"             \"children\":null  \n" +"            }  \n" +"      } \n" +"}";try{ObjectMapper objectMapper = new ObjectMapper();JsonNode readTree = objectMapper.readTree(json);System.out.println(readTree);}catch (Exception e){e.printStackTrace();}}

运行结果如下:
在这里插入图片描述

通过get(fieldName)方法获取节点数据

五.额外补充

1、jackson通过get(“字段名”)api方法获取JsonNode对象时,如果该字段不存在,返回null;

2、如果json数据的某个字段值是基本类型(非object、array),可以使用jackson提供的asText、textValue,asInt、intValue…等方法来获取字段的值;如果字段值是复杂类型,那么上述方法将失效,可以使用toString()、toPrettyString()方法打印值。

3、对于字段值是基本类型的数据,如果是String类型,用 asText() 和 textValue() 获取的结果是一致的;同理,如果是int类型,用asInt()、intValue()获取的结果也是一致的;

4、asText()和textValue()方法都是获取字段是String基本类型的数据,区别是:

asText()会进行强转,如果字段值不是string基本类型数据,会将其转成String基本类型的数据;(如果是复杂类型,返回空字符串)
textValue()只针对String基本类型数据,所以如果字段值是非String基本类型数据,则返回null;
同理,asInt()和intValue()方法也是一样的:

asInt()会进行强转,比如字符串类型的数字转成数字,如果强转失败(比如字符串abc),返回0;(如果是复杂类型,返回0)
intValue()只针对int节本类型数据,对于非int基本类型数据,intValue返回0;

《肖申克的救赎》

生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。

懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。

希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。

每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?

《熔炉》

我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。

现实如水母,看似美好无害实质总是致命伤人。

我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!

世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。

《教父》

人可以不断犯错,但绝不能犯要命的错。

不要憎恨你的敌人,那会影响你的判断力。

人并非生来就伟大,而是越活越伟大。

《活着》

人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。

以笑的方式哭,在死亡的伴随下活着。

没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。

你的命是爹娘给的,你不要命了也得先去问问他们。

《我不是药神》

世界上只有一种病,穷病,这种病你没法治,你也治不过来。

人间最高贵的是善良,是对生命的致敬。

《指环王》

把手握紧,里面什么也没有;把手放开,你得到的是一切。

我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。

20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。

或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》

22.人生不能像做菜,把所有的材料都准备好了才下锅。

什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。

其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。

《让子弹飞》

世界上本没有路,有了腿便有了路。

如果你活着,早晚都会死;如果你死了,你就永远活着。

赚钱嘛,不寒碜

http://www.lryc.cn/news/61473.html

相关文章:

  • 鉴源论坛 · 观模丨面向界面的图形化测试技术
  • Midjourney以图生图的详细教程(含6种案例介绍)
  • 基于单片机的电路特性测试仪的设计
  • 五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同
  • IAP升级遇到的问题
  • 简单聊聊k8s,和docker之间的关系
  • 半小时学会HTML5
  • 研报精选230421
  • AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
  • 人工智能论文的风格特点
  • 成功上岸国防科大!
  • 【C语言】输入输出、字符串操作、内存操作、文件操作函数
  • [golang gin框架] 25.Gin 商城项目-配置清除缓存以及前台列表页面数据渲染公共数据
  • 文件夹改名,如何在改名之后批量复制文件夹名称
  • 汇编与内联 x86-64
  • OSCP-UT99(IRC、Unreal Tournament 99)
  • Kubernetes CPU内存资源限定
  • fitlog使用教程(持续更新ing...)
  • Linux下搭建Go开发环境
  • 一文搞懂SQL注入攻击
  • CCTV-TIME特别关注:首届医药港国际健康美食文化嘉年华
  • FE_TA不知道的CSS 换行系列【1】white-space
  • matlab中计算标准差std函数
  • 【操作系统】原语操作详解
  • mongDB的相关查询插入操作
  • 【C++初阶】C++入门(二):引用内联函数auto关键字范围for循环(C++11)指针空值nullptr
  • 地下污水厂智能照明控制应用
  • IS220UCSAH1A利用电子和空穴两种载流子导电的,所以叫做双极型电路
  • 干货|英国专利申请
  • springboot文件上传