本文介绍一种通用、健壮的方法,通过递归遍历任意深度的嵌套 json(字典/列表结构),精准提取所有匹配键(如 `"aaaa"` 或 `"bbbb"`)对应的值,并组装为 python 列表。适用于结构不固定、层级复杂的真实业务数据。
在处理真实 API 返回或配置文件中的嵌套 JSON 时,我们常遇到键名相同但嵌套层级多变的情况(如示例中 "AAAA" 和 "BBBB" 分散在多个 values 数组内的深层对象中)。此时

推荐采用递归深度优先搜索(DFS)策略:统一将 JSON 视为树形结构,对每个节点判断其类型(字典 or 列表),并递归访问其子元素,一旦发现目标键即收集值。
以下是一个简洁、可复用的工具函数:
import json
def extract_values(data, key):
"""
递归提取 JSON 数据中所有指定 key 对应的值(支持任意嵌套层级)
Args:
data: dict 或 list 类型的 JSON 解析后对象
key: 要查找的字符串键名
Yields:
所有匹配 key 的值(按 DFS 遍历顺序)
"""
if isinstance(data, dict):
# 若当前是字典,检查是否直接包含目标 key
if key in data:
yield data[key]
# 递归遍历所有 value(可能为 dict/list/基本类型)
for value in data.values():
yield from extract_values(value, key)
elif isinstance(data, list):
# 若当前是列表,递归遍历每个元素
for item in data:
yield from extract_values(item, key)
# 基本类型(str/int/bool/None)不作处理,自动跳过使用该函数即可轻松获取所需结果:
# 假设 raw_json 是你提供的原始字符串(注意:示例 JSON 缺少结尾大括号,实际使用前需补全)
# data = json.loads(raw_json)
# 提取所有 "AAAA" 和 "BBBB" 的值
List_AAAA = list(extract_values(data, "AAAA")) # → [9090, 9091]
List_BBBB = list(extract_values(data, "BBBB")) # → ["MONACO", "NICE"]
print("List_AAAA:", List_AAAA) # [9090, 9091]
print("List_BBBB:", List_BBBB) # ['MONACO', 'NICE']✅ 关键原理说明:
⚠️ 注意事项:
此方法不仅解决当前问题,更可作为通用 JSON 提取工具集成至项目 utils 模块,大幅提升处理不规则数据的开发效率。