利用jackson的JsonNode封装工具类快速获取json字符串中任意节点的json数据

本文主要是介绍利用jackson的JsonNode封装工具类快速获取json字符串中任意节点的json数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 关联资源
    • 实现效果
    • 实现代码
    • 实现思路梳理

关联资源

  • 代码地址
  • 视频讲解:
    • 利用jackson中的JsonNode取值
    • 封装工具类xxx.xxx.xx的方式取值
    • 结合泛型封装工具类取值并返回对应类型

实现效果

工具类实现 xxx.xxx.xxx的形式直接从json字符串中获取任意节点字段的值,如下图所示:
在这里插入图片描述

实现代码

当前引入的jackson的依赖为:

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

封装Json处理工具类

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;/*** @author lzp* @Date:2023/3/1* @description: json处理工具类*/
public class MyJsonUtils {/*** 单例objectMapper,提高性能* 网上的性能测试:https://blog.csdn.net/qq_31960623/article/details/117778291*/private static final ObjectMapper objectMapper = new ObjectMapper();/*** 单例 饿汉式*/private static final MyJsonUtils INSTANCE = new MyJsonUtils();private MyJsonUtils() {}/*** 单例模式,暴露一个单例的工具类实例获取*/public static MyJsonUtils getInstance() {return INSTANCE;}/*** 通过key路径取到最后一级key对应的jsonNode** @param jsonStr 原始的json字符串* @param keyPath xx.xxx.xxx格式的key路径* @return*/public JsonNode getValueByKeyPath(String jsonStr, String keyPath) throws JsonProcessingException {JsonNode jsonNode = objectMapper.readTree(jsonStr);String[] paths = keyPath.split("\\.");// 遍历key路径,直到最后一层的keyJsonNode currentNode = jsonNode;for (String key : paths) {currentNode = currentNode.get(key);if (currentNode == null) {return null;}}return currentNode;}/*** 通过key路径取到最后一级key对应的value值** @param jsonStr 原始json字符串* @param keyPath xx.xxx.xxx格式的key路径* @param cls     值的对象类型*/public <T> T getValueByKeyPath(String jsonStr, String keyPath, Class<T> cls) throws JsonProcessingException {JsonNode jsonNode = this.getValueByKeyPath(jsonStr, keyPath);if (jsonNode == null) {return null;}return objectMapper.treeToValue(jsonNode, cls);}/*** 测试*/public static void main(String[] args) throws JsonProcessingException {String jsonStr = "{\"head\":{\"face\":\"隔壁老王的小脸\",\"eye\":{\"left\":\"轮回眼\",\"right\":\"写轮眼\"},\"iq\":250},\"body\":\"身材修长\",\"likeStudy\":true}";// 分别取到各个类型的值String valueStr = MyJsonUtils.getInstance().getValueByKeyPath(jsonStr, "head.eye.left", String.class);Integer valueInt = MyJsonUtils.getInstance().getValueByKeyPath(jsonStr, "head.iq", Integer.class);Boolean valueBool = MyJsonUtils.getInstance().getValueByKeyPath(jsonStr, "likeStudy", Boolean.class);System.out.println(valueStr);System.out.println(valueInt);System.out.println(valueBool);}}

实现思路梳理

关键代码就下面这块

  • 先把字符串按 "."进行分割成数组
  • 然后遍历key,注意每次循环的时候,currentNode = 下一个key的值,类似递归的思想,最后一次循环中的key就能取到最后一层

在这里插入图片描述

这篇关于利用jackson的JsonNode封装工具类快速获取json字符串中任意节点的json数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204071

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方