Похоже, вы используете библиотеку telepot
.
По поводу этой ошибки:
TypeError (f 'объект JSON должен быть str, байтами или байтовым массивом,'
TypeError: объект JSON должен быть str, байтами или байтовым массивом, а не Update
Функция json.loads()
получает str
и возвращает dict
. Пока update
- это list
из Update
с, update[2]
- это Update
. И вы передаете update[2]
в json.loads()
, отсюда и ошибка выше.
Я хочу вернуть сообщение как json
Я не понимаю, что вы подразумеваете под "возвратом JSON", но здесь есть два варианта, описанных в комментариях. Выберите правильный return
для вас:
def getMessage(self, offset):
if offset:
updates = self.bot.getUpdates(offset=offset)
else:
updates = self.bot.getUpdates()
# updates is a list of <Update> objects
# an <Update> can or can not be a <Message>
# if you want to return a message from a third update as a python dict use this:
return updates[2]["message"] # dict
### OR ###
# if you want to return a message from a third update as a JSON string, use this:
return json.dumps(update[2]["message"]) # JSON string
Примечание:
Я также не понимаю, почему вы пытаетесь вернуть третий элемент из списка обновлений.
Просто знайтечто updates
может быть пустым списком (или списком с менее чем 3 элементами в нем) и updates[2]
вызовет IndexError
.