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

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();}}

相关文章:

  • 程序代码篇---Pytorch实现LATM+APF轨迹预测
  • MySQL安全加固:权限管控与加密实践
  • python实现web请求与回复
  • Oracle 11G RAC重启系统异常
  • Android-ViewModel+LiveData学习总结
  • flutter 项目调试、flutter run --debug调试模式 devtools界面说明
  • 结构性断裂:中年失业潮与婚姻解体的崩溃逻辑
  • 使用 vip 加入两台 master 节点
  • 精益数据分析(77/126):问题-解决方案画布——创业团队的周度聚焦与迭代利器
  • 《Android 应用开发基础教程》——第十四章:Android 多线程编程与异步任务机制(Handler、AsyncTask、线程池等)
  • python、R、shell兼容1
  • PARSCALE:大语言模型的第三种扩展范式
  • GraphPad Prism工作表的基本操作
  • 第二届帕鲁杯 solar_Linux后门排查 WP
  • C++ 日志系统实战第五步:日志器的设计
  • 《C++ list详解》
  • vscode包含工程文件路径
  • 【VScode】python初学者的有力工具
  • java后端-海外登录(谷歌/FaceBook)
  • ETL 代表什么?ETL 开发主要做什么?
  • 石家庄品牌网站建设/小红书推广方式
  • 建设官方网站的请示/网络营销专业学什么课程
  • 共和网站建设公司/好看的web网页
  • 深圳做微信网站制作/seo百度发包工具
  • 个人衣服定制店铺/seo做的比较好的公司
  • asp影楼网站设计/郑州网络营销哪家正规