news 2026/7/10 0:58:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 9:05:20

uniapp+python基于微信小程序的付费厨房管理系统的设计与实现

文章目录摘要概述技术架构核心功能模块创新点与优势应用价值系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要概述 该系统基于UniApp框架与Python后端技术&#xff0c;结合微信小程序平台&…

作者头像 李华
网站建设 2026/6/26 15:25:36

uniapp+python房屋租赁租房需求的数据分析系统小程序

文章目录 系统概述技术架构核心功能数据处理流程安全与扩展性应用场景 系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 该系统基于UniApp框架与Python后端技术&#xff0c;构建一个房屋…

作者头像 李华
网站建设 2026/7/9 13:50:35

GitHub 热榜项目 - 日榜(2026-01-30)

GitHub 热榜项目 - 日榜(2026-01-30) 生成于&#xff1a;2026-01-30 统计摘要 共发现热门项目&#xff1a; 14 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜显示AI智能体开发依然是绝对焦点&#xff0c;跨平台个人助手、多智能体协作平台和专业化工具链项…

作者头像 李华
网站建设 2026/7/6 20:44:14

一文吃透ClaudeBox:AI编码开发的安全隔离与高效协作神器

在AI驱动开发的浪潮下&#xff0c;开发者既要追求高效的编码辅助&#xff0c;又要保障开发环境的稳定性、安全性与可复用性。Anthropic推出的Claude系列模型在编码领域的表现已得到行业认可&#xff0c;而ClaudeBox作为适配Claude的专属开发环境工具&#xff0c;更是凭借容器化…

作者头像 李华