当前位置: 首页 > ds >正文

Java-根据路径获取JSON字符串的value值

实现内容

入参: 一串json的字符串,根据传入的字符串路径和想要获取此路径下的key值

出参: 此路径下的key的value值

实现原理

采用一层一层获取的方式,判断第一层并且获取第一层的数据,放入到数组中,将该数组放到下一次循环,再获取下一层的数据

实现方法

    /*** 根据路径获取JSON的数据* @param entityString JSON的string字符串* @param routeCode 路径 ROOT|BODY|OUT_DATA|OWE_LIST* @param subjectParam 需要获取的value* @return 返回数组或者value值* @throws Exception 异常抛出*/Object parsingJSON(String entityString,String routeCode, String subjectParam) throws Exception{Object obj = JSON.parse(entityString);String[] routeList = (routeCode + "|" + subjectParam).split("\\|");Object currentObject = obj;// 循环路径for (String route : routeList) {// 如果是数组-解析数组if (currentObject instanceof JSONArray) {// 用于汇聚子数据JSONArray c = new JSONArray();// 循环子数据for (int i = 0; i < ((JSONArray) currentObject).size(); i++) {// 获取子数据Object arrItem = ((JSONArray) currentObject).get(i);// 检查子数据是否为数组if (arrItem instanceof JSONArray) {// 循环子数据的子数据for (int j = 0; j < ((JSONArray) arrItem).size(); j++) {Object arrItemItem = ((JSONArray) arrItem).get(j);// 只处理到子数据的子数据----- 只需要关心两层数据,多层以上不关心if (arrItemItem instanceof JSONObject) {Object arrItemKey = ((JSONObject) arrItemItem).get(route);if (null != arrItemKey) {c.add(arrItemKey);}}}} else {Object arrItemKey = ((JSONObject) arrItem).get(route);if (null != arrItemKey) {c.add(arrItemKey);}}}currentObject = c;// 不是数组就直接替换} else {currentObject = ((JSONObject) currentObject).get(route);}}return currentObject;}

调用展示

public static void main(String[] args) {String entityString = "{\n" +"    \"ROOT\": {\n" +"        \"BODY\": {\n" +"            \"RETURN_MSG\": \"测试\",\n" +"            \"RETURN_CODE\": \"200\",\n" +"            \"USER_MSG\": \"实例\",\n" +"            \"DETAIL_MSG\": \"订购实例\",\n" +"            \"OUT_DATA\": {\n" +"                \"OWE_LIST\": [\n" +"                    {\n" +"                        \"CONNCT_TEL\": \" \",\n" +"                        \"CUST_ID\": \"11005000006099\",\n" +"                        \"OWE_AMOUNT\": [\n" +"                            {\n" +"                                \"TEXT\": [\n" +"                                    {\n" +"                                        \"a1\": 121231\n" +"                                    },\n" +"                                    {\n" +"                                        \"a1\": 121421\n" +"                                    }\n" +"                                ]\n" +"                            },\n" +"                            {\n" +"                                \"TEXT\": [\n" +"                                    {\n" +"                                        \"a1\": 121421\n" +"                                    },\n" +"                                    {\n" +"                                        \"a1\": 122121\n" +"                                    }\n" +"                                ]\n" +"                            }\n" +"                        ]\n" +"                    },\n" +"                    {\n" +"                        \"CONNCT_TEL\": \" \",\n" +"                        \"CUST_ID\": \"11005000006091\",\n" +"                        \"OWE_AMOUNT\": [\n" +"                            {\n" +"                                \"TEXT\": [\n" +"                                    {\n" +"                                        \"a1\": 121241\n" +"                                    },\n" +"                                    {\n" +"                                        \"a1\": 123121\n" +"                                    }\n" +"                                ]\n" +"                            },\n" +"                            {\n" +"                                \"TEXT\": [\n" +"                                    {\n" +"                                        \"a1\": 121221\n" +"                                    }\n" +"                                ]\n" +"                            }\n" +"                        ]\n" +"                    }\n" +"                ]\n" +"            },\n" +"            \"REQUEST_ID\": \"20270907183443371_1_78\",\n" +"            \"RUN_IP\": \"111.111.111.111\",\n" +"            \"PROMPT_MSG\": \"\"\n" +"        }\n" +"    }\n" +"}\n";String routeCode = "ROOT|BODY|OUT_DATA|OWE_LIST|OWE_AMOUNT|TEXT";String subjectParam = "a1";try {Object res = parsingJSON(entityString,routeCode,subjectParam);System.out.println(res);} catch (Exception e) {e.printStackTrace();}}

http://www.xdnf.cn/news/8230.html

相关文章:

  • zabbix 常见问题
  • 深入解析JVM垃圾回收器:原理、实践与调优指南
  • 实用重复文件批量处理工具
  • 关于SQL SERVER中round函数的用法和示例
  • 一台机器怎么部署k8s集群
  • React-fiber架构
  • Python可视化设计原则
  • 【424. 替换后的最长重复字符】
  • docker-compose常用命令介绍
  • 已经 上线 Vue 项目 国际化 i18n 中译英
  • OpenCV 图像对象的创建与赋值
  • Apollo10.0学习——planning模块(9)之参数详解一
  • Vscode +Keil Assistant编译报错处理
  • C++ -- vector
  • 系统性能分析基本概念(5) : 何时开始性能分析
  • 【语法】C++的map/set
  • 平安健康2025年一季度深耕医养,科技赋能见成效
  • Android Service与BroadcastReceiver深度解析:从零到一的实现与优化
  • python实现web请求
  • 力扣小题, 力扣113.路径总和II力扣.111二叉树的最小深度 力扣.221最大正方形力扣5.最长回文子串更加优秀的算法:中心扩展算法
  • 解压软件推荐:功能、优缺点及使用技巧
  • 【题解-洛谷】P11951 [科大国创杯初中组 2023] 数数
  • w~自动驾驶~合集13
  • 杰发科技AC7840——使用内部温度
  • IO多路复用
  • mysql 创建用户,创建数据库,授权
  • Spring Boot 内置工具类汇总与讲解
  • NumPy 2.x 完全指南【十八】数组元素的新增和删除
  • 数据结构与算法-算法复杂度
  • vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。