引言

继《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高级操作————节点树相关推荐

  1. Jackson高级操作————流式API与JsonGenerator、JsonParser

    引言 继<Jackson快速入门>之后的高级相关操作. Jackson提供了一种对于性能要求应用程序操作json更加高效的方式--流式API,这种方式开销小,性能高,因此,如果应用程序或者 ...

  2. 高级数据结构-KD树

    高级数据结构-KD树 一.基本概念 KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形结构,表示对K维空间的一个划分 用于KNN算法的实现.给定一个目标点,利用KD树可以快速地查找出距 ...

  3. 前端:JS/25/DOM官方定义,DOM分类,HTML节点树(节点关系,节点类型,),核心DOM中公共的属性和方法(节点访问,查找DOM节点,节点属性,节点的创建,追加和删除)

    DOM官方定义 DOM,Document Object Model,文档对象模型,我们可以把网页中的所有"东西"看成是对象": DOM的官方定义:DOM可以使用脚本,动态 ...

  4. SVN 学习笔记-高级操作

    所谓高级操作,只是曲高和寡,其实都不怎么用的.但是关键时候,可能会很有用. 这个高级只是针对基本操作而言.有些操作可能也是比较基本的. 清除锁 有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常 ...

  5. 【ElasticSearch】学习笔记(三)es的高级操作

    [ElasticSearch]学习笔记(三)es的高级操作 文章目录 [ElasticSearch]学习笔记(三)es的高级操作 1. 数据聚合 1.1 聚合总类 1.2 DSL实现聚合 1.2.1 ...

  6. CST微波工作室学习笔记—6.设计建模高级操作2

    CST微波工作室_设计建模操作详解高级操作2 1. 拉伸.旋转和渐变操作 1. 创建模型 2. 拉伸操作 先选中某一个平面:(有红色小点点的面为选中平面) 点击 Modeling > Extru ...

  7. 雀雀JavaScript操作节点

    JavaScript操作节点 2018年4月22日星期日 节点的属性 previousSibling 属性返回同一树层级中指定节点的前一个节点. 被返回的节点以 Node 对象的形式返回. 注释:如果 ...

  8. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

  9. 简单的聊聊自动化测试:Selenium的高级操作

    Selenium-Switch_to switch_to适用场景: ● 处理JS弹框 ● 切换frame ● 切换浏览器窗口 Switch_to处理JS弹框 JavaScript简称JS,应用于HTM ...

最新文章

  1. 关于python的字符串大小转换函数:capitalize() title() upper() swapcase()
  2. EXP-00091错误的说明和解决方法
  3. 中setting怎么配置_用VSCode配置Latex
  4. 详解vue组件的is特性:限制元素动态组件
  5. 26.Azure备份服务器(下)
  6. 字符串表示的大整数相乘
  7. HBase的基础知识
  8. matlab 课程设计循环码性能分析,matlab课程设计--循环码的性能分析
  9. Windows 下搭建 Ruby 开发环境
  10. 不小心运行了一个***程序~word 2003 打开2007格式文件的转换器.rar 里的
  11. php常用技术与thinkphp5,thinkPHP5框架路由常用知识点汇总
  12. Exadata的独门武器--卸载(Offloading)
  13. Unity3D(四)Camera和SkyBox
  14. ghost 开发主题
  15. fedora linux五笔输入法,Fedora 22 上安装 fcitx 五笔输入法
  16. 交叉编译工具arm-linux-gccarm-elf-gcc下载地址全集
  17. android 条形码 两边空白,几个条形码的问题
  18. NetApp 存储阵列 AFF A 系列——可提供屡获殊荣的速度和响应能力,满足性能敏感性工作负载的需求
  19. Element-Ui组件 单选框(Radio) 修改点击激活时的文本颜色,填充色和边框色
  20. PTA题目:7-9 抢红包 (25分)

热门文章

  1. JavaScript中带示例的字符串search()方法
  2. Java中这7个方法,一不小心就用错了!
  3. 不要再用main方法测试代码性能了,用这款JDK自带工具
  4. 为什么建议你使用枚举?
  5. CentOS7.0下Hadoop2.7.3的集群搭建
  6. CentOS7 源码编译安装Python3 shell脚本
  7. 深度学习attention原理_深度学习Anchor Boxes原理与实战技术
  8. Java创建对象的方式——反序列化创建对象
  9. SQL Server和MysQL中的联表更新sql示例
  10. java 验证码校验_JavaWeb验证码校验功能代码实例