如何在结构与深度可变的JSON中提取所有name字段值?
提取嵌套JSON中所有指定键的值
针对你这种结构不固定、层级多变的JSON,最通用的方法是用递归遍历——因为JSON的嵌套结构本质只有字典(dict)和列表(list)两种类型,递归可以深入每一层处理所有元素。
你之前代码的问题
你写的多重for循环语法完全不符合Python规范,而且逻辑没有考虑嵌套层级,根本无法遍历到深层的"name"字段。
通用解决方案代码
import json def extract_all_names(data, result_list): # 处理字典类型数据 if isinstance(data, dict): # 检查当前字典是否包含"name"键 if "name" in data: result_list.append(data["name"]) # 递归处理字典内的所有值 for value in data.values(): extract_all_names(value, result_list) # 处理列表类型数据 elif isinstance(data, list): # 递归处理列表内的每个元素 for item in data: extract_all_names(item, result_list) # 非嵌套类型(字符串、数字等)直接跳过 else: return # 读取目标JSON文件 with open("your_json_file.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 存储结果的列表 names_list = [] extract_all_names(json_data, names_list) print(names_list)
代码说明
- 递归函数
extract_all_names会自动识别数据类型:- 遇到字典时,先检查是否有"name"键,有就把对应值加入结果列表;再遍历字典的所有值,继续递归深入。
- 遇到列表时,逐个遍历列表元素并递归处理。
- 遇到字符串、数字等非嵌套类型,直接跳过。
- 用
json.load()将JSON文件内容转换为Python原生的字典/列表结构,方便后续处理。 - 最终
names_list会收集所有层级中"name"字段的值。
测试你的示例数据
将你给出的示例JSON保存为文件后,运行代码会输出:
['eggs', 'flour', 'almonds', 'oil', 'sugar', 'sugar']
内容的提问来源于stack exchange,提问作者JukeboxHero
相关产品推荐
相关产品推荐

