@gooze

JSON Ключи в словаре почему-то дублируются?

Данная проблема была у меня несколько раз, каждый раз я находил решение, но потом опять сталкиваюсь с этим. В этот раз я уже не могу понять, в чем проблема.
Буду рад если вы подскажите.

Делаю чат-бота, записываю данные о пользователях в файл, от туда-же читаю данные один раз во время запуска бота. Пользуюсь библиотекой json, python3.

Ключи начинают дублироваться после первой же записи в файл.
Вот как я читаю из файла:

def reloadz():
    global users, payments
    try:
        with open(path + 'data.json', 'r', encoding='utf-8') as f:
            datz = json.loads(f.read())
            
            users = datz['users']
            payments = datz['payments']
            
            print(datz)
    except:
        with open(path + 'data.json', 'w') as f:
            f.write(json.dumps({'users': {}, 'payments': []}))
        users = {}
        payments = []

reloadz()


Во время работы бота, я изменяю переменные `users` и `payments`. В конце каждой итерации я делаю запись обратно в файл

with open(path + 'data.json', 'w') as f:
    f.write(json.dumps({'users': users, 'payments': payments}))


В итоге, после первой же итерации, в файле появляется два одинаковых ключа в словаре. Вот пример того, что получается в файле:

{"users": {"603660417": {"sub": false, "current_menu": "main"}, "603660417": {"sub": true, "current_menu": "sub"}}, "payments": [16019644137]}


Думаю уже второй день! Не знаю что делать. Подскажите!
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Taus
Очень вероятно, что где-то в другом месте кода вы добавляете значения в users как по int-ключу, так и str-ключу. Решение: перейти к одной нотации везде.
import json
d = {123: 'a', '123': 'b'}
json.dumps(d) # '{"123": "a", "123": "b"}'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
deeplay Новосибирск
от 130 000 ₽
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
24 окт. 2020, в 22:43
3000 руб./за проект
24 окт. 2020, в 22:27
2500 руб./за проект