Python: не удаляется ключ из JSON файла — как исправить и сохранить изменения
Содержание показать/скрыть
Если при работе с JSON в Python ты удаляешь ключ из данных, но файл остаётся без изменений — это не ошибка кода, а особенность работы с JSON.
Разберём, почему так происходит и как правильно исправить.
В чём проблема
Пример ситуации:
import json
json_data = json.load(open('reda.json'))
k = "carl"
for d in json_dаta:
if k in d:
del d[k]
На первый взгляд всё работает — ключ удаляется.
Но если открыть файл — ничего не изменилось.
Почему ключ не удаляется из файла
Когда ты используешь:
json.load()Python:
- загружает JSON в память
- создаёт копию данных
- не связывает её с файлом
👉 То есть ты меняешь только переменную, а не сам файл.
Как правильно исправить
После изменений нужно перезаписать файл
Рабочий способ (правильный код)
import json
# Чтение файла
with open('reda.json', 'r') as f:
json_data = json.load(f)
k = "carl"
# Удаление ключа
for d in json_dаta:
if k in d:
del d[k]
# Запись обратно в файл
with open('reda.json', 'w') as f:
json.dump(json_data, f, indent=4)
Что изменится после исправления
Было:
[{"carl": 33}, {"carl": 55}, {"user": "user2"}]Стало:
[{}, {}, {"user": "user2"}]👉 Ключ удалён, но объекты остались
Как удалить не только ключ, но и весь объект
Если нужно удалить весь элемент, а не только ключ:
json_data = [d for d in json_data if "carl" not in d]Полный пример:
import json
with open('reda.json', 'r') as f:
json_data = json.load(f)
json_data = [d for d in json_data if "carl" not in d]
with open('reda.json', 'w') as f:
json.dump(json_data, f, indent=4)
Когда использовать каждый вариант
Удаление только ключа
del d["carl"]Подходит если:
- данные нужны дальше
- структура должна сохраниться
Удаление всего элемента
if "carl" not in dПодходит если:
- объект полностью не нужен
- нужно очистить список
Частые ошибки
1. Не сохраняют файл
Самая распространённая ошибка:
json.load()
# изменения
# нет json.dump()
👉 файл не меняется
2. Неправильный режим открытия
Нужно использовать:
'w'3. Не используют with open
Это может привести к:
- ошибкам записи
- проблемам с файлами
Информация