news 2026/5/1 8:13: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/5/1 8:11:35

【读书笔记】《高效演讲》

《高效演讲》&#xff1a;从恐惧到自如的实战指南 一、演讲的本质认知 1.1 演讲恐惧的生理机制 演讲紧张源于人类的"动物精神"。在原始社会&#xff0c;当你面前突然出现很多双眼睛盯着你时&#xff0c;意味着遭遇狼群等危险。此时人体会启动"战或逃"(Figh…

作者头像 李华
网站建设 2026/5/1 8:13:28

2026必备!自考论文难?TOP9 AI论文网站深度测评

2026必备&#xff01;自考论文难&#xff1f;TOP9 AI论文网站深度测评 2026年自考论文写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着自考人数逐年增长&#xff0c;论文写作成为众多考生面临的“拦路虎”。从选题构思到文献检索&#xff0c;再到格式排版与内…

作者头像 李华
网站建设 2026/5/1 4:51:34

AI写论文福利来啦!4款AI论文写作工具,高效搞定期刊论文!

四款实测AI论文写作工具推荐 写期刊论文还在苦恼吗&#xff1f;面对无尽的文献、繁琐的排版格式以及反复的修改&#xff0c;很多学术人士往往感到效率低下。别担心&#xff01;下面将为大家推荐四款经过实测的AI论文写作工具&#xff0c;这些工具不仅能帮助你检索论文文献、生…

作者头像 李华
网站建设 2026/5/1 4:52:16

uniapp+net养老院食堂助餐在线点餐配送系统小程序mysql

文章目录系统概述技术架构核心功能数据库设计安全与扩展性系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 基于UniApp框架和.NET技术栈开发的养老院食堂助餐系统&#xff0c;整合在线点餐…

作者头像 李华