Изменение Json из API с помощью Python

1

У меня есть код json от API, и я хочу, чтобы новые члены чата с кодом ниже, но я получаю только первые два результата, а не последний (тестер). Зачем? Это должно происходить через весь json файл, не так ли?

r = requests.get("https://api.../getUpdates").json()

chat_members = []

a = 0
for i in r:
    chat_members.append(r['result'][a]['message']['new_chat_members'][0]['last_name'])
a = a + 1

Json здесь:

{"ok":true,"result":[{"update_id":213849278,
"message":{"message_id":37731,"from":{"id":593029363,"is_bot":false,"first_name": "@tutu"},"chat":{"id":-1001272017174,"title":"tester account","username":"v_glob","type":"supergroup"},"date":1537470595,"new_chat_participant":{"id":593029363,"is_bot":false,"first_name":"tutu "},"new_chat_member":{"id":593029363,"is_bot":false,"first_name":"\u7535\u62a5\u589e\u7c89\uff0c\u4e2d\u82f1\u6587\u5ba2\u670d\uff0c\u62c9\u4eba\u6e05\u5783\u573e\u8f6f\u4ef6\uff0c\u5e7f\u544a\u63a8\u5e7f\uff0cKYC\u6750\u6599\u8ba4\u8bc1\uff0c","last_name":"@tutupeng"},"new_chat_members":[{"id":593029363,"is_bot":false,"first_name":"\u7535\u62a5\u589e\u7c89\uff0c\u4e2d\u82f1\u6587\u5ba2\u670d\uff0c\u62c9\u4eba\u6e05\u5783\u573e\u8f6f\u4ef6\uff0c\u5e7f\u544a\u63a8\u5e7f\uff0cKYC\u6750\u6599\u8ba4\u8bc1\uff0c","last_name":"@tutu"}]}},{"update_id":213849279,
"message":{"message_id":37732,"from":{"id":658150956,"is_bot":false,"first_name":"Rebecca","last_name":"Lawson"},"chat":{"id":-10012720,"title":"v glob OFFICIAL","username":"v_glob","type":"supergroup"},"date":1537484441,"new_chat_participant":{"id":65815,"is_bot":false,"first_name":"Rebecca","last_name":"Lawson"},"new_chat_member":{"id":65815,"is_bot":false,"first_name":"Rebecca","last_name":"Lawson"},"new_chat_members":[{"id":65815,"is_bot":false,"first_name":"Rebecca","last_name":"Lawson"}]}},{"update_id":213849280,
"message":{"message_id":12,"from":{"id":696749142,"is_bot":false,"first_name":"daniel","language_code":"cs-cz"},"chat":{"id":696749142,"first_name":"daniel","type":"private"},"date":1537537013,"text":"/stat","entities":[{"offset":0,"length":5,"type":"bot_command"}]}},{"update_id":213849281,
"message":{"message_id":37740,"from":{"id":669620,"is_bot":false,"first_name":"Ivan","last_name":"Tester"},"chat":{"id":-100127201,"title":"test account","username":"v_glob","type":"supergroup"},"date":1537537597,"new_chat_participant":{"id":669620191,"is_bot":false,"first_name":"Ivan","last_name":"Tester"},"new_chat_member":{"id":669620191,"is_bot":false,"first_name":"Ivan","last_name":"Tester"},"new_chat_members":[{"id":669620191,"is_bot":false,"first_name":"Ivan","last_name":"Tester"}]}}]}
Теги:
parsing

2 ответа

0
Лучший ответ

Мой коллега придумал решение:

for i in l['result']:
    chat_members.append(i['message']['new_chat_member']['first_name'])

Подводя итог: Итерацию через "результат" без позиционных аргументов

4

Потому что вы перебираете весь ответ dict. На верхнем уровне есть только два элемента, так что то, что вы перебираете. Обратите внимание, что вы фактически не используете переменную итератора, и у вас есть совершенно ненужный отдельный счетчик.

Вместо этого вы должны повторять результат dict:

for result in r['result']:
    if "new_chat_members" in result['message']:
        chat_members.append(result['message']['new_chat_members'][0]['last_name'])
  • 0
    когда я Traceback (most recent call last): File "C:/Users/D...ram.py", line 18, in <module> chat_members.append(result['message']['new_chat_members'][0]['last_name']) KeyError: 'new_chat_members' ваш код, я получаю эту ошибку Traceback (most recent call last): File "C:/Users/D...ram.py", line 18, in <module> chat_members.append(result['message']['new_chat_members'][0]['last_name']) KeyError: 'new_chat_members'
  • 0
    Поскольку третий элемент в списке результатов по какой-то причине не имеет ключа «new_chat_members»; вместо этого у него есть «сущности». Вам нужно проверить документацию по API, чтобы выяснить, почему один элемент имеет структуру, отличную от остальных.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню