Не правильная запись в JSON

При попытке записи в пустой JSON файл новых данных:

{

}

их расположение в файле оказывается не верным:

{
    
}{"qwer": 5148343852015304274}

Так и не смог заставить код записывать внутрь фигурных скобок. На данных момент это последняя версия:

name, password = str(input("имя: ")), str(input("пароль: "))
with open('users.json', 'r+', encoding='utf-8') as file:
     file.seek(0)
     data = json.load(file)
     data[name] = hash(password)
     json.dump(data, file)

Ответы (1 шт):

Автор решения: insolor

После чтения из файла позиция "курсора" находится в конце файла, получается при записи текст добавляется в конец.

Можно, конечно, курсор переместить на начало (делать file.seek(0) после чтения), но проще разделить чтение и запись - читать в режиме "r", записывать в режиме "w". Так текст будет полностью заменяться, не будут оставаться "хвосты" со старым содержимым, если записанный текст окажется короче того что было в файле.

with open('users.json', 'r', encoding='utf-8') as file:
     data = json.load(file)

name, password = input("имя: "), input("пароль: ")
with open('users.json', 'w', encoding='utf-8') as file:
     data[name] = hash(password)
     json.dump(data, file)
→ Ссылка