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

HoRain云--递归解析JSON的终极指南

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

JSON对象的递归解析方法

🌐 通用解析逻辑

💻 多语言实现示例

✅ Python(简洁清晰)

✅ Java(使用 org.json 库)

🔍 高级应用:按路径表达式精准取值(Java + Gson)

⚠️ 关键注意事项

🌟 典型应用场景


JSON对象的递归解析方法

JSON的嵌套特性(对象中包含对象/数组)决定了递归是解析复杂JSON结构最自然高效的方式。核心思想:根据元素类型分支处理,遇到嵌套结构时自我调用。

🌐 通用解析逻辑

1. 判断当前元素类型 ├─ 对象(Object/Dict)→ 遍历键值对,对每个值递归 ├─ 数组(Array/List)→ 遍历每个元素,对每个元素递归 └─ 基础类型(String/Number/Boolean/Null)→ 直接处理 2. 递归终止条件:遇到非容器类型

💻 多语言实现示例

✅ Python(简洁清晰)

import json def parse_json(data, path=""): """带路径追踪的递归解析""" if isinstance(data, dict): for key, value in data.items(): new_path = f"{path}.{key}" if path else key if isinstance(value, (dict, list)): parse_json(value, new_path) else: print(f"{new_path} = {value}") elif isinstance(data, list): for idx, item in enumerate(data): parse_json(item, f"{path}[{idx}]") # 基础类型已在上层处理,此处可省略else # 使用示例 json_str = ''' { "user": "张三", "profile": {"age": 30, "city": "北京"}, "skills": ["Java", "Python", {"tool": "Git"}] }''' parse_json(json.loads(json_str))

输出

user = 张三 profile.age = 30 profile.city = 北京 skills[0] = Java skills[1] = Python skills[2].tool = Git

✅ Java(使用 org.json 库)

import org.json.*; public class JsonRecursiveParser { // 遍历JSONObject private static void traverseObj(JSONObject obj, String path) { for (String key : obj.keySet()) { String currPath = path.isEmpty() ? key : path + "." + key; Object val = obj.get(key); if (val instanceof JSONObject) { traverseObj((JSONObject) val, currPath); } else if (val instanceof JSONArray) { traverseArr((JSONArray) val, currPath); } else { System.out.println(currPath + " = " + val); } } } // 遍历JSONArray private static void traverseArr(JSONArray arr, String path) { for (int i = 0; i < arr.length(); i++) { Object item = arr.get(i); String currPath = path + "[" + i + "]"; if (item instanceof JSONObject) traverseObj((JSONObject) item, currPath); else if (item instanceof JSONArray) traverseArr((JSONArray) item, currPath); else System.out.println(currPath + " = " + item); } } public static void main(String[] args) { String json = "{\"name\":\"李四\",\"hobbies\":[\"读书\",{\"sport\":\"篮球\"}]}"; traverseObj(new JSONObject(json), ""); } }

🔍 高级应用:按路径表达式精准取值(Java + Gson)

// 示例路径: "root[0].elementBs[1].elementName" public static JsonElement getElementByPath(JsonElement json, String path) { String[] parts = path.split("\\."); JsonElement current = json; for (String part : parts) { if (part.contains("[")) { // 处理数组索引: elementBs[1] String key = part.substring(0, part.indexOf('[')); int idx = Integer.parseInt(part.substring(part.indexOf('[')+1, part.indexOf(']'))); current = current.getAsJsonObject().get(key).getAsJsonArray().get(idx); } else { current = current.getAsJsonObject().get(part); } } return current; } // 返回: "testName2" (对应知识库[7]示例)

⚠️ 关键注意事项

问题解决方案
栈溢出风险超深嵌套时改用迭代+显式栈(如Deque)
循环引用标准JSON无此问题,但某些库扩展支持时需记录已访问节点
性能优化大型JSON可结合流式解析(如Jackson Streaming API)
路径追踪递归时传递当前路径参数(如示例所示)
错误处理始终包裹try-catch(JSONDecodeError/JSONException)

🌟 典型应用场景

💡最佳实践

递归解析将JSON的树状结构转化为线性处理流程,是掌握JSON深度处理的核心技能!

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/320650/

相关文章:

  • 计算机毕设java学术团队资源管理系统 基于Java的学术团队资源管理平台设计与实现 Java环境下学术团队资源管理系统的研究与开发
  • React Native鸿蒙版:自定义useMask输入掩码
  • 2026年游戏建模机构量化评估榜单,四大维度数据化评分指南
  • HoRain云--HTTP方法大全:从GET到DELETE全解析
  • uniapp+python基于微信小程序的付费厨房管理系统的设计与实现
  • 2025年成都有名的现浇混凝土公司哪个好,现浇搭建/别墅现浇/现浇屋顶/楼梯现浇/现浇阳台,现浇混凝土公司口碑推荐排行
  • HoRain云--JSON对象解析与应用全指南
  • HoRain云--JSON数组:从入门到精通
  • 导师推荐!继续教育必备!10款一键生成论文工具TOP10测评
  • uniapp+python今日美食推荐小程序的设计与实现
  • 2003-2025年上市公司地级市政府政绩关注度数据
  • uniapp+python基于安卓的图书借阅系统_qby小程序
  • 2005-2024年上市公司股权激励数据
  • 2026年粮油调味品批发零售/粮油调味品配送行业采购指南:五大优质供应商深度解析
  • 深入解析Redis数据持久化:RBD机制原理、实操与生产最佳实践
  • Java实习模拟面试:智慧用能低碳研究院一面高频考点深度解析
  • 2026年惠州代理记账公司推荐:创业范(惠州市)财务代理有限公司,惠州财税公司/惠州工商注册公司/惠州外贸代理记账公司/外贸工厂代理记账公司精选
  • JCP | 哈工大(深圳)胡钢团队:三维钝体流动中主动流动控制的深度强化跨域迁移学习
  • HashMap为什么要引用红黑树
  • APP图标ico格式生成地址
  • 防爆不锈钢波纹软管口碑好的厂家有哪些,昊硕金属制品上榜了吗?
  • C/C++标准术语
  • 2026最新任天堂二手Switch游戏机系列回收价格,支持上门回收
  • 石家庄市井陉矿区农村自建房地基施工要点,2026年石家庄市井陉矿区自建房公司权威排行
  • 2026年热门的钢模板/耐腐蚀钢模板用户好评厂家推荐
  • 石家庄市藁城区农村自建房造价预算表,2026年石家庄市藁城区高性价比自建房公司推荐
  • 无人机河道漂浮检测数据集 废弃物;3. 废弃船;4. 捕鱼养殖;5. 水污染;6. 漂浮物
  • 广州造极科技产品质量如何,选择它做数字化营销合适吗
  • 2026年宁波可靠银料回收联系方式大盘点,哪家性价比高
  • SEW变频器MC07B0150-503-4-00