Python:如何在嵌套JSON数组中仅保留指定字段?
Python 嵌套JSON数组保留指定字段的优雅实现
现有如下嵌套JSON数组数据结构:
[ { '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, 'children': [ { 'field_a': 9, 'field_b': 9, 'field_c': 'wod_c', 'field_d': False, 'children': [ ] } ] } ] } ]
出于打印需求,希望处理后仅保留field_c和对应的子节点字段,得到如下结构:
[ { 'field_c': 'word_a', 'children': [ { 'field_c': 'word_b', 'children': [ { 'field_c': 'wod_c', 'children': [ ] } ] } ] } ]
要求不得修改原始数据,仅复制后操作,以下是最符合Python风格的实现方式:
实现方案
采用递归函数处理嵌套结构,简洁且符合Python惯用写法,全程基于副本操作不修改原数据:
def filter_nested_data(data): # 处理列表类型:逐个递归处理元素 if isinstance(data, list): return [filter_nested_data(item) for item in data] # 处理字典类型:仅保留目标字段及子节点 elif isinstance(data, dict): filtered = {'field_c': data['field_c']} # 检查并递归处理子节点(若原数据存在拼写错误'chilren',替换为对应字段名即可) if 'children' in data: filtered['children'] = filter_nested_data(data['children']) return filtered # 非容器类型直接返回原值 else: return data # 原始数据 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, 'children': [ { 'field_a': 9, 'field_b': 9, 'field_c': 'wod_c', 'field_d': False, 'children': [] } ] } ] } ] # 获取处理后的新数据 filtered_data = filter_nested_data(original_data)
说明
- 递归逻辑会自动遍历所有嵌套层级,对列表和字典分别做适配处理,无需手动写多层嵌套判断。
- 所有操作均基于原始数据的副本生成新结构,完全不会修改原数据。
- 若实际数据中子节点字段名是拼写错误的
chilren,只需将代码中的children替换为chilren即可兼容。
内容的提问来源于stack exchange,提问作者glezo
相关产品推荐
相关产品推荐

