将JSON嵌套到数据框python(instagram json)

时间:2018-09-12 13:27:25

标签: json pandas nested

因此,我从IG下载了消息传递json,并尝试将其转换为DataFrame。我只感兴趣的是一个发件人('sabinabacevich')到另一个发件人('panbacevich')的邮件内容。 JSON的外观如下:

 [{'participants': ['panbacevich', 'sabinabacevich'], 
   'conversation':
                  [{'sender': 'panbacevich', 'created_at': '2018-09- 
                  11T07:43:00.344130+00:00', 'media_owner': 'tyrone', 
                  'media_share_caption': 'Fr lol', 'media_share_url': 
                  'https://scontent-lax3- 1.cdninstagram.com/vp/
                  18f52cd945b10a7c6612ccb1644ee0a3/5C320320/t51.2885- 
                  15/e35/40456720_1886441298071798_219870885965499684_n.jpg? 
                  ig_cache_key=MTg2NTYxNjkxOTEyNzQ2NzY5Mg%3D%3D.2'}, 
                  {'sender':

我遍历了网上发现的大多数嵌套示例,但无法到达那里。请发送帮助

1 个答案:

答案 0 :(得分:1)

首先,您在上面发布的所有json都不是有效的json,我通过在线验证程序(此验证器:https://jsonlint.com/)对其进行了清理,并对其进行了一些清理,使其看起来像这样:

[{"participants": ["panbacevich", "sabinabacevich"],
     "conversation": [{"sender": "panbacevich",
                       "created_at": "2018-09-11T07:43:00.344130+00:00",
                       "media_owner": "tyrone",
                       "media_share_caption": "Fr lol",
                       "media_share_url": "https://scontent-lax3-1.cdninstagram.com/vp/%2018f52cd945b10a7c6612ccb1644ee0a3/5C320320/t51.2885-%2015/e35/40456720_1886441298071798_219870885965499684_n.jpg?%20ig_cache_key=MTg2NTYxNjkxOTEyNzQ2NzY5Mg%3D%3D.2"
                       }]
     }]

请注意,我已删除“发件人”字段。

从那里开始,使用json包将其加载到数据帧中相对简单:

import json

import pandas as pd

file = [{"participants": ["panbacevich", "sabinabacevich"],
     "conversation": [{"sender": "panbacevich",
                       "created_at": "2018-09-11T07:43:00.344130+00:00",
                       "media_owner": "tyrone",
                       "media_share_caption": "Fr lol",
                       "media_share_url": "https://scontent-lax3-1.cdninstagram.com/vp/%2018f52cd945b10a7c6612ccb1644ee0a3/5C320320/t51.2885-%2015/e35/40456720_1886441298071798_219870885965499684_n.jpg?%20ig_cache_key=MTg2NTYxNjkxOTEyNzQ2NzY5Mg%3D%3D.2"
                       }]
     }]

data = json.dumps(file)

df = pd.read_json(data)

df.conversation.values可以从那里访问“会话”列,然后您想要的字典在列表内的列表中。可以通过以下方式将其分解:

dict_you_want = df.conversation.values[0][0]

从那里您可以像从常规词典中一样访问任何内容:

print(dict_you_want['media_share_caption'])
"Fr lol"

请注意,如果数据框长于1行,则还必须选择要访问的行。

希望有帮助!