利用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

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度