使用Python从API更改Json

使用Python从API更改Json,python,json,parsing,Python,Json,Parsing,我有一个来自API的json代码,我想用下面的代码获得新的聊天成员,但我只得到前两个结果,而不是最后一个(Tester)。为什么?它应该在整个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]['

我有一个来自API的json代码,我想用下面的代码获得新的聊天成员,但我只得到前两个结果,而不是最后一个(Tester)。为什么?它应该在整个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"}]}}]}

因为您迭代整个响应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'])

因为您迭代整个响应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'])

我的一位同事提出了一个解决方案:

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

总而言之:在没有位置参数的情况下迭代“result”

我的一位同事想出了一个解决方案:

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

总而言之:在没有位置参数的情况下迭代“result”

当我粘贴代码时,我得到了这个错误
回溯(最近一次调用):文件“C:/Users/D…ram.py”,第18行,在chat\u members.append中(结果['message']['new\u chat\u members'][0]['last\u name'])KeyError:“new_chat_members”
,因为由于某些原因,结果列表中的第三个元素没有“new_chat_members”键;相反,它有“实体”。你需要查看API文档,找出为什么一个元素的结构与其他元素不同。它是一个电报机器人,发送各种数据:/我可以把它转换成字符串,然后用正则表达式查看它吗?不,那样做是错误的。您可以在结果['message']中选择“new_chat_members”(如果是“new_chat_members”(如果是“new_chat_members”(如果是“new_chat_members”(如果是“new_chat_members”(如果是“new_chat_members”(如果是“new_chat_chat_members)”):
进行类似操作:
如果是“new_chat_members”(如果是“new_chat_chat_members(新
其他:
像这样中断
当我粘贴你的代码时,我得到了这个错误
回溯(最近一次调用):文件“C:/Users/D…ram.py”,第18行,在chat\u members.append(结果['message']['new\u chat\u members'][0]['last\u name'])KeyError:“新建聊天室成员”
,因为结果列表中的第三个元素由于某种原因没有“新建聊天室成员”键;它有“实体”相反。你需要检查API文档,找出为什么一个元素的结构与其他元素不同。这是一个电报机器人,它发送各种数据:/我可以把它转换成字符串,然后用正则表达式查看它吗?不,那样做是错误的。如果结果是“new_chat_members”,你可以做类似于
的事情['message']:
对于r['result']:
如果结果['message']中有“新的聊天室成员”:
聊天室成员。追加(result['message']['new聊天室成员'[0]['last\u name'])
其他:
像这样中断