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

相关文章

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效