Как правильно спарсить 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()
