Python 递归删除 JSON 中的键值(包含嵌套内容)
Python 递归删除 JSON 中的键值(包含嵌套内容)
在处理 JSON 数据时,有时需要删除其中特定的键值,即使它们存在于嵌套的字典或列表中。可以使用递归函数来遍历整个 JSON,然后在遍历过程中判断每个节点是否包含需要删除的键值,如果包含就将其删除。
以下是一个示例代码:
import json
def delete_key(json_data, key):
if isinstance(json_data, dict):
for k, v in list(json_data.items()):
if k == key:
del json_data[k]
else:
delete_key(v, key)
elif isinstance(json_data, list):
for item in json_data:
delete_key(item, key)
# 示例 JSON 数据
json_str = '''
{
'name': 'John',
'age': 30,
'pets': [
{
'name': 'Fluffy',
'type': 'cat'
},
{
'name': 'Fido',
'type': 'dog'
}
],
'address': {
'city': 'New York',
'state': 'NY',
'zip': '10001'
}
}
'''
# 将 JSON 字符串转换为 Python 对象
data = json.loads(json_str)
# 删除 pets 数组中所有元素的 type 键
delete_key(data, 'type')
# 输出删除后的 JSON 数据
print(json.dumps(data, indent=4))
运行上述代码,输出结果如下:
{
'name': 'John',
'age': 30,
'pets': [
{
'name': 'Fluffy'
},
{
'name': 'Fido'
}
],
'address': {
'city': 'New York',
'state': 'NY',
'zip': '10001'
}
}
可以看到,pets 数组中所有元素的 'type' 键都被成功删除了。
代码说明:
delete_key(json_data, key)函数递归地遍历 JSON 数据,如果当前节点是字典,则检查每个键是否等于需要删除的键,如果是,则将其删除。否则,递归地调用delete_key函数来处理当前节点的值。- 如果当前节点是列表,则递归地调用
delete_key函数来处理列表中的每个元素。
注意:
- 该代码使用
list(json_data.items())来创建一个字典的键值对列表,以便在迭代时安全地删除键值对。 - 该代码使用
json.dumps(data, indent=4)来以美观的格式输出删除后的 JSON 数据。
总结:
通过使用递归函数,可以方便地删除 JSON 中的键值,即使它们存在于嵌套的字典或列表中。这在处理复杂 JSON 结构时非常有用。
原文地址: https://www.cveoy.top/t/topic/ozmo 著作权归作者所有。请勿转载和采集!