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 结构时非常有用。

Python 递归删除 JSON 中的键值(包含嵌套内容)

原文地址: https://www.cveoy.top/t/topic/ozmo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录