python - Acceda a un campo particular en datos JSON anidados arbitrariamente
list dictionary (3)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo extraer un valor único de la respuesta JSON? 3 respuestas
{
"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": "",
¿Cómo obtengo el contenido "SÍGUEME POR FAVOR" de este json?
replay_data = raw_replay_data[''data''][''video_info''][0]
announcement = replay_data[''announcement'']
Esto toma todo dentro
[''announcement'']
y no puedo hacer
[''announcement''][''content'']
.
¿Cuál es la forma correcta de hacer esto?
Gracias de antemano por ayudarme a resolver esto.
El contenido del
"announcement"
es otra cadena JSON.
Descifrarlo y luego acceder a su contenido como lo estaba haciendo con los objetos externos.
En una sola línea
>>> json.loads(data[''data''][''video_info''][0][''announcement''])[''content'']
''FOLLOW ME PLEASE''
Para ayudarlo a comprender cómo acceder a los datos (para que no tenga que volver a preguntar), deberá mirar sus datos .
Primero, presentemos sus datos muy bien.
Puede usar
json.dumps(data, indent=4)
o puede usar una herramienta en línea como
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''
}
*** Tenga en cuenta que los datos en la clave de
announcement
son en realidad
más
datos json, que he presentado en líneas separadas.
Primero, averigüe dónde residen sus datos.
Está buscando los datos en la clave de
content
, a la que se accede mediante la clave de
announcement
, que forma parte de un diccionario dentro de una lista de dictados, a la que se puede acceder con la clave
video_info
, a la que a su vez se accede mediante
data
.
Entonces, en resumen, "descienda" la escalera que es "datos" usando los siguientes "peldaños":
-
data
, un diccionario -
video_info
, una lista de dictos -
announcement
, un dict en el primer dict de la lista de dictados -
content
reside como parte de los datos json.
Primero,
i = data[''data'']
Siguiente,
j = i[''video_info'']
Siguiente,
k = j[0] # since this is a list
Si solo quieres el primer elemento, esto es suficiente. De lo contrario, necesitaría iterar :
for k in j:
...
Siguiente,
l = k[''announcement'']
Ahora,
l
son datos JSON.
Cárgalo -
import json
m = json.loads(l)
Por último,
content = m[''content'']
print(content)
''FOLLOW ME PLEASE''
Con suerte, esto debería servir como guía si tiene consultas futuras de esta naturaleza.
Has
anidado datos JSON
;
la cadena asociada con la clave de
''annoucement''
es en sí misma otro documento JSON integrado e independiente.
Tendrás que decodificar esa cadena primero:
import json
replay_data = raw_replay_data[''data''][''video_info''][0]
announcement = json.loads(replay_(data[''announcement''])
print(announcement[''content''])
luego maneje el diccionario resultante desde allí.