Как использовать getUpdates () с JSON - PullRequest
0 голосов
/ 22 мая 2019

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

Вот код, который я нашел:

def getMessage(self, offset):
    if offset:
        update = self.bot.getUpdates(offset=offset) 
    else:
        update = self.bot.getUpdates()
    update_json = json.loads(update[2])
    return update_json

Я получил следующую ошибку:

TypeError(f'the JSON object must be str, bytes or bytearray, '  
TypeError: the JSON object must be str, bytes or bytearray, not Update

Я хочу вернуть сообщение как json, это возможно?

1 Ответ

0 голосов
/ 22 мая 2019

Похоже, вы используете библиотеку 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.

...