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

如何使用Python逐步移除JSON对象(字典)中的属性

移除嵌套字典中指定属性的简便方法

首先你提供的这段JSON存在语法错误,正确的JSON结构应该用冒号分隔键值,且引号需配对,修正后的结构如下:

{
  "name": "John",
  "address": "123 bb",
  "age": "40",
  "children": [
    {
      "name": "smith",
      "address": "458 ff",
      "age": "25",
      "grand_children": [
        {"name": "smith", "address": "458 ff", "age": "25"},
        {"name": "smith", "address": "458 ff", "age": "25"}
      ]
    },
    {
      "name": "smith",
      "address": "458 ff",
      "age": "25",
      "grand_children": [
        {"name": "smith", "address": "458 ff", "age": "25"},
        {"name": "smith", "address": "458 ff", "age": "25"}
      ]
    }
  ]
}

针对这种多层嵌套的字典/列表结构,要批量移除指定属性(比如name),最简便的方式是写一个递归函数,自动遍历所有层级的结构,遇到字典就删除目标键,遇到列表就递归处理每个元素。

示例代码(Python)

直接修改原数据

def remove_key(obj, key):
    if isinstance(obj, dict):
        # 删除当前字典的目标键,键不存在时不报错
        obj.pop(key, None)
        # 递归处理字典内的所有值
        for value in obj.values():
            remove_key(value, key)
    elif isinstance(obj, list):
        # 递归处理列表中的每个元素
        for item in obj:
            remove_key(item, key)
    return obj

# 假设data是修正后的字典
data = {
  "name": "John",
  "address": "123 bb",
  "age": "40",
  "children": [
    {
      "name": "smith",
      "address": "458 ff",
      "age": "25",
      "grand_children": [
        {"name": "smith", "address": "458 ff", "age": "25"},
        {"name": "smith", "address": "458 ff", "age": "25"}
      ]
    },
    {
      "name": "smith",
      "address": "458 ff",
      "age": "25",
      "grand_children": [
        {"name": "smith", "address": "458 ff", "age": "25"},
        {"name": "smith", "address": "458 ff", "age": "25"}
      ]
    }
  ]
}

# 移除所有层级的name属性
result = remove_key(data, "name")
print(result)

不修改原数据(返回新对象)

如果不想改动原始数据,可以在函数中创建副本处理:

def remove_key(obj, key):
    if isinstance(obj, dict):
        new_obj = obj.copy()
        new_obj.pop(key, None)
        # 递归处理副本中的每个值
        for k, v in new_obj.items():
            new_obj[k] = remove_key(v, key)
        return new_obj
    elif isinstance(obj, list):
        # 递归处理列表中的每个元素并生成新列表
        return [remove_key(item, key) for item in obj]
    else:
        return obj

# 调用后原data不受影响
result = remove_key(data, "name")

这种递归方法通用性极强,不管嵌套多少层(比如children、grand_children层级),都能一次性清理所有指定属性,无需手动逐层遍历处理。

内容的提问来源于stack exchange,提问作者Budd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:57:32