如何用Python递归提取复杂嵌套JSON中指定键的对应值
实现代码
以下是可直接运行的完整代码,适配任意嵌套深度的JSON结构:
import json def extract_target_values(data, target_keys=('name', 'size', 'mountpoint')): result = [] def recursive_parse(node): # 处理字典类型节点 if isinstance(node, dict): current_item = {} for k, v in node.items(): if k in target_keys: current_item[k] = v # 递归遍历值的内容 recursive_parse(v) # 当前字典存在目标key则加入结果 if current_item: result.append(current_item) # 处理列表类型节点 elif isinstance(node, list): for item in node: recursive_parse(item) # 字符串、数字、布尔值等基础类型无需处理直接跳过 else: return recursive_parse(data) return result # 加载本地JSON文件 with open('demk-bkp-001.json', encoding='utf-8') as file: data = json.load(file) # 执行提取逻辑 extracted_data = extract_target_values(data) # 打印结果验证 for item in extracted_data: print(item)
逻辑说明
- 递归函数会自动遍历所有层级的字典、列表元素,无需提前知晓JSON的嵌套结构
- 默认输出的结果为列表,每个元素是对应层级下包含
name/size/mountpoint的关联字典,方便后续做结构化处理 - 如果仅需要收集所有目标key的独立取值,不需要保留关联关系,可以用简化版实现:
def extract_target_values(data, target_keys=('name', 'size', 'mountpoint')): result = [] def recursive_parse(node): if isinstance(node, dict): for k, v in node.items(): if k in target_keys: result.append(v) recursive_parse(v) elif isinstance(node, list): for item in node: recursive_parse(item) recursive_parse(data) return result
内容的提问来源于stack exchange,提问作者zed
相关产品推荐
相关产品推荐

