{
"status": "200",
"msg": "",
"data": {
"time": "1515580011",
"video_info": [
{
"announcement": "{\"announcement_id\":\"6\",\"name\":\"INS\\u8d26\\u53f7\",\"icon\":\"http:\\\/\\\/liveme.cms.ksmobile.net\\\/live\\\/announcement\\\/2017-08-18_19:44:54\\\/ins.png\",\"icon_new\":\"http:\\\/\\\/liveme.cms.ksmobile.net\\\/live\\\/announcement\\\/2017-10-20_22:24:38\\\/4.png\",\"videoid\":\"15154610218328614178\",\"content\":\"FOLLOW ME PLEASE\",\"x_coordinate\":\"0.22\",\"y_coordinate\":\"0.23\"}",
"announcement_shop": "",
Comment puis-je récupérer le contenu "FOLLOW ME PLEASE" de ce json?
replay_data = raw_replay_data['data']['video_info'][0]
announcement = replay_data['announcement']
Cette capture le tout avec ['announcement']
et je ne peux pas faire ['announcement']['content']
.
Quel est le bon moyen de le faire?
Merci d'avance de m'avoir aidé à comprendre cela.
En une seule ligne -
>>> json.loads(data['data']['video_info'][0]['announcement'])['content']
'FOLLOW ME PLEASE'
Pour vous aider à comprendre comment accéder aux données (vous n'avez donc pas à demander à nouveau), vous devrez regarder vos données .
Tout d'abord, organisons bien vos données. Vous pouvez soit utiliser json.dumps(data, indent=4)
, soit utiliser un outil en ligne comme JSONLint.com .
{
'data': {
'time': '1515580011',
'video_info': [{
'announcement': ( # ***
"""{
"announcement_id": "6",
"name": "INS\\u8d26\\u53f7",
"icon": "http:\\\\/\\\\/liveme.cms.ksmobile.net\\\\/live\\\\/announcement\\\\/2017-08-18_19:44:54\\\\/ins.png",
"icon_new": "http:\\\\/\\\\/liveme.cms.ksmobile.net\\\\/live\\\\/announcement\\\\/2017-10-20_22:24:38\\\\/4.png",
"videoid": "15154610218328614178",
"content": "FOLLOW ME PLEASE",
"x_coordinate": "0.22",
"y_coordinate": "0.23"
}"""),
'announcement_shop': ''
}]
},
'msg': '',
'status': '200'
}
*** Notez que les données de la clé announcement
sont en fait plus des données json, que j'ai présentées sur des lignes distinctes.
Tout d'abord, découvrez où résident vos données. Vous recherchez les données dans la clé content
, accessible par la clé announcement
, qui fait partie d'un dictionnaire dans une liste de dictés, accessible par la touche video_info
, Qui est à son tour accessible par data
.
Donc, en résumé, "descendez" l'échelle qui est "données" en utilisant les "échelons" suivants -
data
, un dictionnairevideo_info
, Une liste de dictannouncement
, un dict dans le premier dict de la liste des dictcontent
résidant dans le cadre des données json.Premier,
i = data['data']
Prochain,
j = i['video_info']
Prochain,
k = j[0] # since this is a list
Si vous ne voulez que le premier élément, cela suffit. Sinon, vous devrez itérer :
for k in j:
...
Prochain,
l = k['announcement']
Maintenant, l
est une donnée JSON. Charge le -
import json
m = json.loads(l)
Enfin,
content = m['content']
print(content)
'FOLLOW ME PLEASE'
J'espère que cela devrait servir de guide si vous avez de futures questions de cette nature.
Vous avez données JSON imbriquées; la chaîne associée au 'annoucement'
key est en soi un autre document JSON intégré et séparé.
Vous devrez d'abord décoder cette chaîne:
import json
replay_data = raw_replay_data['data']['video_info'][0]
announcement = json.loads(replay_data['announcement'])
print(announcement['content'])
puis gérez le dictionnaire résultant à partir de là.
Le contenu de "announcement"
est une autre chaîne JSON. Décodez-le puis accédez à son contenu comme vous le faisiez avec les objets extérieurs.