You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在结构与深度可变的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:57:20