Используя переменную для чтения из JSON?

1

Я пытаюсь заставить своего бота Python использовать переменную, которую я уже определил (случайный), прочитать файл JSON и отправить мне URL-адрес, соответствующий переменной, которую он дал.

with open('data.json', 'r') as json_data:
    data = json.load(json_data)

max = data["max"]["max"]
random = random.randint(1, max)
url = data[random]["url"]

Но когда я запускаю бот, он выполняет все "KeyError", и после проверки, заменив url[random]["url"] на url["5"]["url"] он правильно отправил мне url, который соответствует 5 я "Не знаю, невозможно ли сделать то, что я пытаюсь сделать таким образом, или если есть какой-то специальный формат, который я должен использовать:

вот мой вопрос, и я действительно не знаю, как правильно это сформулировать, так как я не знаю терминологию так:

Есть ли простой способ использовать эту "случайную" переменную, когда мой бот читает из json?

Я предпочел бы использовать такой вид формирования, потому что это то, что я понимаю, и привык, но если это невозможно, я не против пробовать что-то еще

Если вам интересно, как выглядит json, это немного напоминает:

{
"max": {"max":139},
"1": {stuff here},
"2": {stuff here},
"3": {stuff here},
"4": {stuff here},
"etc"...
}
  • 4
    random.randint возвращает целое число (как следует из названия). Вам нужно преобразовать его в строку. Также не называйте это random , это помешает названию модуля. rdm = str(random.randint(1, max)) . Редактировать : также не используйте max в качестве имени переменной - оно перезапишет __builtin__.max .
Теги:

2 ответа

3
Лучший ответ

Проблема в том, что random.randint возвращает целое число, в то время как словарь, к random.randint вы обращаетесь, имеет строковые ключи. Вы можете решить это, обернув str вокруг случайной переменной при доступе к словарю:

url = data[str(random)]["url"]
  • 0
    Кроме того, как @pault упоминается в его комментарии, не называйте вашу переменную так же, как модуль, чтобы предотвратить сбой будущего кода.
  • 1
    Стоит отметить, что JSON не будет принимать целые числа в качестве ключей. Они автоматически конвертируются в строки. Укушенный этим прежде :)
Показать ещё 1 комментарий
1

В файле json есть строки в виде ключей. Пытаться:

url = data[str(random)]["url"]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню