JSONObject优雅获取深层字段属性值

2024-03-26 07:36

本文主要是介绍JSONObject优雅获取深层字段属性值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开篇说明

如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。
技术栈 >> java
邮箱 >> 15673219519@163.com

描述介绍

根据JSONObject中字段的名称,优雅获取深层属性值

  • 使用示例,取error_entry的数量。JSON的层次结构如下 aggregations.3.buckets.[key=error_entry].doc_count
/*
{"took": 3043,"timed_out": false,"_shards": {"total": 7,"successful": 7,"skipped": 0,"failed": 0},"hits": {"total": {"value": 38,"relation": "eq"},"max_score": null,"hits": []},"aggregations": {"3": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "error_entry","doc_count": 34},{"key": "error_patch","doc_count": 4}]}}
}
*/public static void main(String[] args) {String jsonStr = "{\"took\":3043,\"timed_out\":false,\"_shards\":{\"total\":7,\"successful\":7,\"skipped\":0,\"failed\":0},\"hits\":{\"total\":{\"value\":38,\"relation\":\"eq\"},\"max_score\":null,\"hits\":[]},\"aggregations\":{\"3\":{\"doc_count_error_upper_bound\":0,\"sum_other_doc_count\":0,\"buckets\":[{\"key\":\"error_entry\",\"doc_count\":34},{\"key\":\"error_patch\",\"doc_count\":4}]}}};JSONObject jsonObject = JSONObject.parseObject(jsonStr); Object obj = getDeepFieldValue(jsonObject, "aggregations.3.buckets.[key=error_entry].doc_count");System.out.println(obj.toString());}
public Object getDeepFieldValue(JSONObject jsonObject, String jsonPath) {String[] split = jsonPath.split("\\.");Object currentObject = jsonObject;for (String item : split) {if (currentObject instanceof JSONObject) {JSONObject temp = (JSONObject) currentObject;if (temp.containsKey(item)) {currentObject = temp.get(item);} else {return null;}} else if (currentObject instanceof JSONArray) {JSONArray temps = (JSONArray) currentObject;String[] kv = item.replace("[", "").replace("]", "").split("=");boolean exist = false;for (Object obj : temps) {if (obj instanceof JSONObject) {JSONObject json = (JSONObject) obj;if (kv.length == 2 && json.containsKey(kv[0]) && String.valueOf(json.get(kv[0])).equals(kv[1])) {currentObject = json;exist = true;break;}}}if (!exist) {return null;}} else {return null;}}return currentObject;}

这篇关于JSONObject优雅获取深层字段属性值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现