
本文介绍如何在不修改原始数据的前提下,使用 Python 递归函数高效提取嵌套 JSON 列表中特定字段(如仅保留 'field_c' 和 'children'),生成精简、可打印的新结构。
本文介绍如何在不修改原始数据的前提下,使用 python 递归函数高效提取嵌套 json 列表中特定字段(如仅保留 `'field_c'` 和 `'children'`),生成精简、可打印的新结构。
在处理深度嵌套的 JSON 数据(尤其是树形结构)时,常需对输出进行裁剪——例如仅保留用于展示的字段(如 field_c),同时维持原有嵌套关系。由于原始数据不可修改,必须创建深拷贝并构建新结构。最 Pythonic 的方式是采用递归映射(recursive mapping):定义一个纯函数,对每个节点提取所需键,并对 children 字段递归调用自身。
以下是一个健壮、可复用的实现:
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
import copy
def keep_fields(data, fields=('field_c',), children_key='children'):
"""
递归筛选嵌套 JSON 结构中的指定字段
:param data: 输入列表或字典(支持多层嵌套)
:param fields: 要保留的字段名元组(如 ('field_c',))
:param children_key: 子节点字段名(默认 'children',注意原数据中存在拼写错误 'chilren')
:return: 新结构,仅含指定字段及递归处理后的子节点
"""
if isinstance(data, list):
return [keep_fields(item, fields, children_key) for item in data]
elif isinstance(data, dict):
# 提取指定字段(仅当键存在时)
filtered = {k: v for k, v in data.items() if k in fields}
# 递归处理 children(若存在且为列表)
if children_key in data and isinstance(data[children_key], list):
filtered[children_key] = keep_fields(data[children_key], fields, children_key)
return filtered
else:
return data # 基础类型(str/int/bool等)直接返回
# 示例使用
original_data = [
{
'field_a': 8,
'field_b': 9,
'field_c': 'word_a',
'field_d': True,
'children': [
{
'field_a': 9,
'field_b': 9,
'field_c': 'word_b',
'field_d': False,
'chilren': [ # 注意:此处原数据拼写为 'chilren',非标准 'children'
{
'field_a': 9,
'field_b': 9,
'field_c': 'wod_c',
'field_d': False,
'chilren': []
}
]
}
]
}
]
# 安全深拷贝 + 筛选(保留 field_c,children 字段名按实际调整)
filtered = keep_fields(
copy.deepcopy(original_data),
fields=('field_c',),
children_key='children' # 使用标准键名;若需兼容原数据中的 'chilren',可传入 'chilren'
)
print(filtered)
✅ 关键要点说明:
- 使用 copy.deepcopy() 确保原始数据绝对安全;
- 函数支持任意字段组合(如 fields=('field_c', 'field_d'))和自定义子节点键名,提升复用性;
- 自动跳过不存在的字段,避免 KeyError;
- 显式类型判断(list / dict)使逻辑清晰、边界鲁棒;
- 原数据中 'chilren' 是拼写错误,实践中建议统一修正为 'children',否则需在调用时显式指定 children_key='chilren'。
该方案简洁、无外部依赖、符合 Python 函数式编程习惯,是处理此类嵌套过滤任务的标准实践。










