def write_to_json(text):
# никаких "a+"; "w" и только "w"
# Никаких CP1251; JSON - это Unicode
# ensure_ascii=False - если хочешь человекочитаемый русский текст
with open(FILE_NAME, "w", encoding="UTF-8") as file:
json.dump(text, file, ensure_ascii=False)
FILE_NAME = "data.json"
dict1 = {"test1": 1,
"test2": 2}
dict2 = {"test3": 3,
"test4": 4}
# В JSON-файл записывается ОДНО значение
write_to_json([dict1, dict2])
Ошибка в том, что ты записываешь в файл НЕСКОЛЬКО JSON-текстов. Это так не работает. Нельзя к JSON-тексту просто взять и приписать другой JSON-текст.
Дописывание чего-то в JSON-файл делается так:
temp = read_json() # читаем и распаковываем существующий JSON
temp.append({"test5": 5}) # вносим изменения в распакованное
write.json(temp) # упаковываем и записываем новый JSON
import json
def write_to_json(text):
with open(FILE_NAME, "a+", encoding="windows-1251") as file:
json.dump(text, file)
def read_json():
with open(FILE_NAME) as file:
data = json.load(file)
return data
FILE_NAME = "data.json"
dict1 = {"test1": 1,
"test2": 2}
dict2 = {"test3": 3,
"test4": 4}
write_to_json(dict1)
write_to_json(dict2)
print(f"Из файла прочитано {read_json()}")
Я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\Алла\Desktop\Андрей\Проекты_по_программированию\PycharmProjects\черновики пайчарм\все\test_json.py", line 27, in <module>
print(f"Из файла прочитано {read_json()}")
File "C:\Users\Алла\Desktop\Андрей\Проекты_по_программированию\PycharmProjects\черновики пайчарм\все\test_json.py", line 11, in read_json
data = json.load(file)
File "C:\Users\Алла\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 293, in load
return loads( fp.read (),
File "C:\Users\Алла\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\Алла\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 25 (char 24)
Process finished with exit code 1
После ошибки json-файл выглядит так:
{"test1": 1, "test2": 2}{"test3": 3, "test4": 4}
Я так понимаю, что ошибка происходит из за того что между первым и вторым словарем нет запятой. Но как реализовать постановку запятой автоматически? Пробовал ставить в такой формат:
{
list=[
{"test1": 1, "test2": 2}
{"test3": 3, "test4": 4}
]
}
Но при следующем запуске снова была получена ошибка, из за того что новые словари добавлялись не в список list а в самый конец. Как убрать ошибку/реализовать авто-постановку запятой/добавление словарь в список list?