使用python从嵌套Json获取所需数据
我有一个嵌套的JSON,如下所示:使用python从嵌套Json获取所需数据,python,json,python-3.x,Python,Json,Python 3.x,我有一个嵌套的JSON,如下所示: { "ok": true, "messages": [ { "bot_id": "G45667S9F", "type": "message", "text": "garbage123", "user": "SDFGHJ123", "ts": "1555007738.345800" }, { "client_msg_id": "xxxxxxxx
{
"ok": true,
"messages": [
{
"bot_id": "G45667S9F",
"type": "message",
"text": "garbage123",
"user": "SDFGHJ123",
"ts": "1555007738.345800"
},
{
"client_msg_id": "xxxxxxxxxxxxxxxxxxx",
"type": "message",
"text": "completed task123",
"user": "SDFGHJ123",
"ts": "1555007735.345700"
},
{
"client_msg_id": "xxxxxxxxxxxxxxxxxxx",
"type": "message",
"text": "sdfghnjmxcvbnmsd",
"user": "SDFGHJ123",
"ts": "1555007721.345500"
},
{
"bot_id": "G45667S9F",
"type": "message",
"text": "garbage123",
"user": "SDFGHJ123",
"ts": "1555007451.345300"
},
{
"client_msg_id": "xxxxxxxxxxxxxxxxxxx",
"type": "message",
"text": "starting task123",
"user": "SDFGHJ123",
"ts": "1555007449.345200"
},
{
"bot_id": "G45667S9F",
"type": "message",
"text": "garbage123",
"user": "SDFGHJ123",
"ts": "1554960212.319800"
}
],
"has_more": true
}
我想提取所有具有关键字“client\u msg\u id”的文本字段,但不提取具有“bot\u id”的文本字段
预期输出:[“已完成任务123”、“sdfghnjmxcvbnmsd”、“正在启动任务123”]
下面是我试过的
text1 = json.loads(r1.data)
object_list = text1['messages']
chill = [obj['text'] for obj in object_list]
print(chill)
这将打印JSON中的所有文本字段。您可以在列表末尾添加和
条件,如下所示:
[obj['text'] for obj in text1['messages'] if 'bot_id' not in obj.keys()]
使用它来测试结果列表中应该包含的项目。只需检查'client\u msg\u id'
是否在obj
字典键中
chill = [obj['text'] for obj in object_list if 'client_msg_id' in obj]
假设字典分配给数据
,您可以这样做
valid = [message['text'] for message in data['messages'] if "client_msg_id" in message and 'bot_id' not in message]
print(valid)
#['completed task123', 'sdfghnjmxcvbnmsd', 'starting task123']
在这里,您遍历所有消息,对于具有keyclient\u msg\u id
但没有keybot\u id
的消息,只读取keytext
的值,这给出了完全错误的输出['garbage123','garbage123','garbage123']
抱歉-不在
中注意:不需要在obj.keys()中使用
就足够了,在python 2中使用keys()
会大大降低性能。不要用它。这篇文章经过编辑。这个问题专门用Python3,FWIW标记