Как правильно спарсить JSON на питоне?

Всем привет! Столкнулся с проблемой парсинга JSON. Есть вот такой код:

@dp.message(F.text)
async def on_message(message: Message):
    headers = {"X-Auth-Token": str(AUTH_TOKEN), "Content-Type": "application/json"}
    data = {
        "model": "llama70b",
        "messages": [
            {"role": "user", "text": "Ты модератор проверяющий сообщения участников чата. Отвечай строго по форме: Оставить/Удалить"},
            {"role": "system", "text": message.text}
        ]
    }

    try:
        response = requests.post(URL, headers=headers, json=data, timeout=10)
        result = response.json()
        moderation_decision = result['result']['alternatives']['message']['text'].strip()
        await message.answer(f"Решение модератора: {moderation_decision}")
        if moderation_decision == "Удалить":
            await message.delete()

    except Exception as e:
        await message.answer(f"Неожиданная ошибка: {e}")

И вот такой JSON от модели:

{'result': {'alternatives': {'message': {'role': 'assistant', 'text': 'Удалить'}, 'status': 'ALTERNATIVE_STATUS_FINAL'}, 'usage': {'inputTextTokens': '55', 'completionTokens': '3', 'totalTokens': '58', 'completionTokensDetails': None}, 'modelVersion': '10.02.2025'}}

Бот постоянно отправляет мне вот это

Неожиданная ошибка: list indices must be integers or slices, not str

Как ее исправить я не знаю, может быть я что то упустил?

UPD:

Текст ошибки:

текст ошибки


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

Автор решения: Димооон

Как оказалось модель стала (или разные модели) по другому возвращать(ют) ответ и alternatives в моем случае возвращался списком.

{'result': {'alternatives': [{'message': {'role': 'assistant', 'text': 'Удалить'}, 'status': 'ALTERNATIVE_STATUS_FINAL'}], 'usage': {'inputTextTokens': '51', 'completionTokens': '3', 'totalTokens': '54', 'completionTokensDetails': {'reasoningTokens': '0'}}, 'modelVersion': '09.12.2024'}}

И вместо

result['result']['alternatives']['message']['text'].strip()

Надо

result['result']['alternatives'][0]['message']['text'].strip()
→ Ссылка