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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:22:36