Ошибка при парсинге JSON и использовании переменной для сравнения
Всем привет! Ловлю ошибку:
"TypeError: string indices must be integers"
через раз, т.е., иногда все проходит хорошо, иногда всплывает косяк. Понимаю, что проблема в парсинге JSON, но не могу кодом правильно написать, чтобы исключить появление ошибки.
После переменную edited_text_json использую в сравнении двух фраз, чтобы увидеть процент соответствия двух фраз и из-за неправильного кода ловлю False, из-за чего переменная передается пустой None.
Подскажите пожалуйста в чем косяк
Текст JSON получаю в таком виде:
{
"count": 1,
"items": [
{
"dialogId": "ce3a0999-5f93-49f1-9ccc-3093d0d97703",
"messagesAsString": "Робот: Аудио\nЧеловек: добрый день это короткое аудио сообщение для проверки транскрипция текста"
},
]
}
def trancription(token, id_call_task):
"""
Функция для получения текста из тела Json, который в звонке сказал бот, мы его получаем из задачи на обзвон и результат задачи передаем в переменно id_call_task
:param token: токен авторизации
:param id_call_task: уникальный номер задачи, которую мы создали для обзвона
:return: текст, который сказал бот, если текст есть в запросе мы получим True, если нет - False
"""
url = f"https://analyse.twin24.ai/api/messagesAsString&taskId={id_call_task}"
headers = {
'Authorization': f'Bearer {token}'
}
response = requests.request("GET", url, headers=headers)
logger.info(response.json())
try:
text_json = response.json()['items'][0]['messagesAsString']
edited_text_json = text_json.lower().replace("робот: аудио", "").replace("человек:", "")
except(KeyError, IndexError,):
return False
logger.debug(f"Текст, полученный из функции trancription: {text_json}")
if 'добрый' in edited_text_json:
return edited_text_json
elif 'добрый' in text_json['items'][1]['messagesAsString']:
logger.info("Второе условие парсинга Джсон ключ 2: ")
return edited_text_json
else:
return False
Ответы (1 шт):
Сначала вы делаете так:
text_json = response.json()['items'][0]['messagesAsString']
то есть в text_json у вас лежит некоторая строка. Потом вы делаете так:
elif 'добрый' in text_json['items'][1]['messagesAsString']:
а т.к. у вас text_json - строка, вы не можете взять от него индекс ['items']