Python 从列表中删除 JSON 对象

要从列表中删除 JSON 对象:

  1. 将 JSON 对象解析为 Python 字典列表。
  2. 使用 enumerate() 函数对列表进行迭代。
  3. 检查每个字典是否是您要删除的字典,并使用 pop() 方法删除匹配的字典。
import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_list = json.load(f)

    # [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}]
    print(my_list)

    for idx, obj in enumerate(my_list):
        if obj['id'] == 2:
            my_list.pop(idx)

new_file_name = 'new-file.json'

with open(new_file_name, 'w', encoding='utf-8') as f:
    f.write(json.dumps(my_list, indent=2))

该示例显示如何从文件中的对象数组中删除 JSON 对象。

我们可以使用相同的方法从文件外的对象数组中删除 JSON 对象。

import json

my_json = '[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]'

my_list = json.loads(my_json)

for idx, dictionary in enumerate(my_list):
    if dictionary['id'] == 2:
        my_list.pop(idx)

# [{'id': 1, 'name': 'Alice'}]
print(my_list)

json_again = json.dumps(my_list)
print(json_again) #  '[{"id": 1, "name": "Alice"}]'

如果我们的 JSON 位于文件中,请使用 json.load() 方法解析 json。

json.load 方法用于将文件反序列化为 Python 对象,而 json.loads 方法用于将 JSON 字符串反序列化为 Python 对象。

下一步是遍历列表并检查每个字典中的键是否具有特定值。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_list = json.load(f)

    # [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}]
    print(my_list)

    for idx, obj in enumerate(my_list):
        if obj['id'] == 2:
            my_list.pop(idx)

new_file_name = 'new-file.json'

with open(new_file_name, 'w', encoding='utf-8') as f:
    f.write(json.dumps(my_list, indent=2))

一旦找到匹配的字典,我们必须使用 list.pop() 方法将其从列表中删除。

list.pop 方法删除列表中给定位置的项目并将其返回。

如果我们只想从列表中删除 1 个字典,也可以添加一个 break 语句。

for idx, obj in enumerate(my_list):
        if obj['id'] == 2:
            my_list.pop(idx)
            break

如果字典位于列表的开头,这可以为我们节省一些不必要的迭代时间。

最后一步是在示例中打开一个新文件(new-file.json),将列表序列化为 json 并写入文件。

new_file_name = 'new-file.json'

with open(new_file_name, 'w', encoding='utf-8') as f:
    f.write(json.dumps(my_list, indent=2))

查看笔记

扫码一下
查看教程更方便