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

递归算法 分析json字符串,自制简易表达式

json实例

{"success": true,"code": 200,"message": "调用成功","data": {"nodeResults": [{"success": true,"result": {"success": true,"score": 240.0,"hitRules": [{"success": true,"score": 60.0}, {"success": true,"score": 61.0}, {"success": true,"score": 66.0}, {"success": true,"score": 610.0}]}},  {"success": true,"result": {"success": true,"score": 120.0,"hitRules": [{"success": true,"score": 50.0}, {"success": true,"score": 90.0}]}}]}
}

现在要获取score的值,路径为data->nodeResults->result->hitRules->score

采用递归算法,层层分析json,自定义一个简单的表达式,对象就直接写属性名,数组的属性名后面加上[]

data.nodeResults[].result.hitRules[].score

算法代码如下:

private static void analysisJSON(String el,String json){String[] els = el.split("\\.");JSONArray array ;JSONObject jsonObject;String s = "";if(els.length==1){ s = el;}else {for (int i = 1; i < els.length; i++) {s = s + els[i] + ".";}}if("".equals(s)) return;JSONObject temp = new JSONObject();if (els.length==0) return;if(els[0].endsWith("[]")){jsonObject = JSONObject.parseObject(json);if(jsonObject.get(els[0].substring(0,els[0].length()-2))!=null) {array = JSONArray.parseArray(jsonObject.get(els[0].substring(0, els[0].length() - 2)).toString());for (int i = 0; i < array.size(); i++) {analysisJSON(s.substring(0, s.length() - 1), ((JSONObject) array.get(i)).toJSONString());}}}else {try {jsonObject = JSONObject.parseObject(json);if (jsonObject.get(els[0]) != null) {if(els.length==1) {System.out.println("已找到匹配的字段------>"+jsonObject.get(els[0]).toString());}else{analysisJSON(s.substring(0, s.length() - 1), jsonObject.get(els[0]).toString());}}}catch (Exception e){}}}

main方法调用端:

public static void main(String[] args) {String text = "";//json内容analysisJSON("data.nodeResults[].result.hitRules[].score",text );}

运行结果如下:

已找到匹配的字段------>60.0
已找到匹配的字段------>61.0
已找到匹配的字段------>66.0
已找到匹配的字段------>610.0
已找到匹配的字段------>50.0
已找到匹配的字段------>90.0

相关文章:

  • 校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!
  • Microsoft VBA Excel 单元格 重复元素 去重
  • 利用python脚本,根据词条爬取百度图片(爬虫)
  • 基于 YAML 接口自动化测试框架设计
  • 设计模式——行为型——策略模式Strategy
  • vue2项目设置浏览器标题title及图标logo
  • Django批量插入和分页器
  • 阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置
  • uniapp H5 开发,公众号时请求跨域了,要用proxy
  • 路径优化算法 | 基于A星算法实现复杂城市地形下无人机三维航迹规划
  • 计算机票.java
  • 文心一言官网入口:一站式解决AI疑惑,探索AI世界的无限可能
  • Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?
  • Qt实现TFTP Server和 TFTP Client(二)
  • Adobe推出20多个,企业版生成式AI定制、微调服务
  • eclipse的离线汉化
  • EventListener原理
  • JDK 6和JDK 7中的substring()方法
  • js继承的实现方法
  • linux学习笔记
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring框架之我见(三)——IOC、AOP
  • vue:响应原理
  • 翻译:Hystrix - How To Use
  • 复杂数据处理
  • 机器学习学习笔记一
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 前端面试之CSS3新特性
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 译米田引理
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 阿里云API、SDK和CLI应用实践方案
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​用户画像从0到100的构建思路
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.ajax()参数及用法
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)nginx 配置(nginx.conf)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (ros//EnvironmentVariables)ros环境变量
  • (八)Spring源码解析:Spring MVC
  • (办公)springboot配置aop处理请求.
  • (二)PySpark3:SparkSQL编程
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转) 深度模型优化性能 调参
  • *上位机的定义
  • .bat批处理(六):替换字符串中匹配的子串
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本