如何使用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
相关产品推荐
相关产品推荐

