Python递归解析嵌套JSON,提取同级path与url构建字典
层级JSON转路径-URL映射字典的实现方案
需求说明
给定嵌套层级的JSON结构,每个节点包含path(路径)、subPages(子节点数组,位于url字段之前)、url(对应链接)三个字段,需要将所有节点的path作为键、url作为值,生成一个扁平的字典。
原方法问题分析
你之前的json_extract函数仅能提取所有指定键的取值,无法建立path与对应url的关联,也没有针对性处理层级节点的遍历逻辑,因此无法满足需求。
解决方案:递归遍历关联键值
核心逻辑是遍历每个节点时,直接记录当前节点的path和url映射关系,再递归处理所有子节点,最终收集所有映射对。
代码实现
def build_path_url_map(node, result_dict=None): # 初始化结果字典,避免递归时重复创建 if result_dict is None: result_dict = {} # 记录当前节点的path-url映射 if "path" in node and "url" in node: result_dict[node["path"]] = node["url"] # 递归处理所有子页面节点 if "subPages" in node and isinstance(node["subPages"], list): for sub_node in node["subPages"]: build_path_url_map(sub_node, result_dict) return result_dict # 测试示例数据 data = { "path": "/", "subPages": [ { "path": "/1", "subPages": [ { "path": "/12", "subPages": [ { "path": "/123", "subPages": [], "url": "123_URL", } ], "url": "12_URL", }, { "path": "/13", "subPages": [ { "path": "/131", "subPages": [ { "path": "/1311", "subPages": [ { "path": "/13111", "subPages": [], "url": "13111_URL", } ], "url": "1311_URL", } ], "url": "131_URL", } ], "url": "13_URL", } ], "url": "1_URL", } ] } # 生成映射字典 result = build_path_url_map(data) print(result)
代码说明
- 函数接收当前节点和可选的结果字典,首次调用时自动初始化空字典
- 优先检查当前节点是否包含
path和url字段,存在则直接添加到结果字典 - 遍历当前节点的
subPages数组,对每个子节点递归调用函数,实现全层级遍历 - 无论JSON嵌套多少层,都能完整收集所有节点的
path-url映射关系
运行结果
执行代码后会输出包含所有节点映射的字典:
{ '/': '1_URL', '/1': '1_URL', '/12': '12_URL', '/123': '123_URL', '/13': '13_URL', '/131': '131_URL', '/1311': '1311_URL', '/13111': '13111_URL' }
内容的提问来源于stack exchange,提问作者amartins
相关产品推荐
相关产品推荐

