Jackson高级操作————节点树
引言
继《Jackson快速入门》基础篇之后的树模型相关操作。
节点树模型
ObjectMapper构建JsonNode节点树,类似于DOM解析器的XML。
@Testpublic void testJsonTree() throws JsonProcessingException, IOException {String jsonString = "{\"name\":\"Tom\", \"age\":25,\"isTeacher\":false,\"marks\": [100,90,85],\"father\" : {\"name\" : \"Jack\", \"age\" : 45}}";JsonNode jsonNode = mapper.readTree(jsonString);System.out.println("----" + jsonNode);/* 遍历节点名称*/Iterator<String> fieldNames = jsonNode.fieldNames();while (fieldNames.hasNext()) {System.out.println(fieldNames.next());}System.out.println("----------------");/* 遍历节点属性值*/Iterator<JsonNode> elements = jsonNode.elements();while (elements.hasNext()) {System.out.println(elements.next());}System.out.println("----------------");/* 获取指定节点属性值*//* get(int index)for accessing value of the specified element of an array node. * For other nodes, null is always returned.*/JsonNode path = jsonNode.get("marks").get(0);System.out.println(path);}
输出结果:
树到Json转换
@Testpublic void testTree2Json() throws JsonGenerationException, JsonMappingException, IOException {ArrayNode marksNode = mapper.createArrayNode();marksNode.add(100);marksNode.add(90);marksNode.add(50);ObjectNode rootNode = mapper.createObjectNode();rootNode.put("name", "Tom");rootNode.put("age", 21);rootNode.set("verified", marksNode);// 序列化到Tom.json文件中mapper.writeValue(new File("Tom.json"), rootNode);// 从文件中再读取回来JsonNode treeNode = mapper.readTree(new File("Tom.json"));// 遍历Iterator<JsonNode> elements = treeNode.elements();while (elements.hasNext()) {System.out.println(elements.next());}}
输出结果:
树到Java对象转换
通过mapper.treeToValue + Class对象,转换成指定POJO。
@Testpublic void testTree2JavaObj() throws JsonGenerationException, JsonMappingException, IOException {ObjectNode rootNode = mapper.createObjectNode();ArrayNode marksNode = mapper.createArrayNode();marksNode.add(100);marksNode.add(95);marksNode.add(85);rootNode.put("name", "Tom");rootNode.put("age", 21);rootNode.put("verified", false);rootNode.set("marks", marksNode);mapper.writeValue(new File("Tom.json"), rootNode);JsonNode treeNode = mapper.readTree(new File("Tom.json"));Student stuTom = mapper.treeToValue(treeNode, Student.class);System.out.println(stuTom);}/*** 学生类* <br>类名:Student<br>*/static class Student {String name;int age;boolean verified;int[] marks;// getter-setter@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", verified=" + verified + ", marks="+ Arrays.toString(marks) + "]";}}
输出结果:
综上就是关于使用jackson操作节点树的相关用法,包括遍历各种元素,选取各种元素,以及树与json、POJO之间的转换。
Jackson高级操作————节点树相关推荐
- Jackson高级操作————流式API与JsonGenerator、JsonParser
引言 继<Jackson快速入门>之后的高级相关操作. Jackson提供了一种对于性能要求应用程序操作json更加高效的方式--流式API,这种方式开销小,性能高,因此,如果应用程序或者 ...
- 高级数据结构-KD树
高级数据结构-KD树 一.基本概念 KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形结构,表示对K维空间的一个划分 用于KNN算法的实现.给定一个目标点,利用KD树可以快速地查找出距 ...
- 前端:JS/25/DOM官方定义,DOM分类,HTML节点树(节点关系,节点类型,),核心DOM中公共的属性和方法(节点访问,查找DOM节点,节点属性,节点的创建,追加和删除)
DOM官方定义 DOM,Document Object Model,文档对象模型,我们可以把网页中的所有"东西"看成是对象": DOM的官方定义:DOM可以使用脚本,动态 ...
- SVN 学习笔记-高级操作
所谓高级操作,只是曲高和寡,其实都不怎么用的.但是关键时候,可能会很有用. 这个高级只是针对基本操作而言.有些操作可能也是比较基本的. 清除锁 有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常 ...
- 【ElasticSearch】学习笔记(三)es的高级操作
[ElasticSearch]学习笔记(三)es的高级操作 文章目录 [ElasticSearch]学习笔记(三)es的高级操作 1. 数据聚合 1.1 聚合总类 1.2 DSL实现聚合 1.2.1 ...
- CST微波工作室学习笔记—6.设计建模高级操作2
CST微波工作室_设计建模操作详解高级操作2 1. 拉伸.旋转和渐变操作 1. 创建模型 2. 拉伸操作 先选中某一个平面:(有红色小点点的面为选中平面) 点击 Modeling > Extru ...
- 雀雀JavaScript操作节点
JavaScript操作节点 2018年4月22日星期日 节点的属性 previousSibling 属性返回同一树层级中指定节点的前一个节点. 被返回的节点以 Node 对象的形式返回. 注释:如果 ...
- LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法
LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...
- 简单的聊聊自动化测试:Selenium的高级操作
Selenium-Switch_to switch_to适用场景: ● 处理JS弹框 ● 切换frame ● 切换浏览器窗口 Switch_to处理JS弹框 JavaScript简称JS,应用于HTM ...
最新文章
- 关于python的字符串大小转换函数:capitalize() title() upper() swapcase()
- EXP-00091错误的说明和解决方法
- 中setting怎么配置_用VSCode配置Latex
- 详解vue组件的is特性:限制元素动态组件
- 26.Azure备份服务器(下)
- 字符串表示的大整数相乘
- HBase的基础知识
- matlab 课程设计循环码性能分析,matlab课程设计--循环码的性能分析
- Windows 下搭建 Ruby 开发环境
- 不小心运行了一个***程序~word 2003 打开2007格式文件的转换器.rar 里的
- php常用技术与thinkphp5,thinkPHP5框架路由常用知识点汇总
- Exadata的独门武器--卸载(Offloading)
- Unity3D(四)Camera和SkyBox
- ghost 开发主题
- fedora linux五笔输入法,Fedora 22 上安装 fcitx 五笔输入法
- 交叉编译工具arm-linux-gccarm-elf-gcc下载地址全集
- android 条形码 两边空白,几个条形码的问题
- NetApp 存储阵列 AFF A 系列——可提供屡获殊荣的速度和响应能力,满足性能敏感性工作负载的需求
- Element-Ui组件 单选框(Radio) 修改点击激活时的文本颜色,填充色和边框色
- PTA题目:7-9 抢红包 (25分)
热门文章
- JavaScript中带示例的字符串search()方法
- Java中这7个方法,一不小心就用错了!
- 不要再用main方法测试代码性能了,用这款JDK自带工具
- 为什么建议你使用枚举?
- CentOS7.0下Hadoop2.7.3的集群搭建
- CentOS7 源码编译安装Python3 shell脚本
- 深度学习attention原理_深度学习Anchor Boxes原理与实战技术
- Java创建对象的方式——反序列化创建对象
- SQL Server和MysQL中的联表更新sql示例
- java 验证码校验_JavaWeb验证码校验功能代码实例