limpiar - Cómo decodificar JSON con Python
python json ejemplo (4)
Asumo que usted analizaría los datos en un diccionario y luego extraería los bits relevantes de él.
Puedes analizar json en python usando la json apropiada
Obtengo mi JSON de reddit.com, esencialmente algo como esto. He leído bastante, pero realmente no entiendo cómo puedo obtener la información que quiero de este JSON (quiero una lista de los enlaces de la historia). Entiendo que puedo "decodificar" el JSON en un diccionario, pero ¿debo recurrir en todo el JSON para obtener lo que necesito?
Gracias por adelantado.
Hay dos formas de "descodificar" json con Python, después de haberlo analizado en dados y listas con la biblioteca json.
Primero, accediendo a ella mediante índices, como este:
url_list = [t[''entries''][0][''url''] for t in data[''windows''][0][''tabs'']]
O bien, puede iterar sobre su estructura de árbol. La función de ejemplo a continuación no es de propósito general, solo ilustra que necesita considerar los tres tipos diferentes de "nodos" de JSON al analizar el árbol. El "valor" de una clave puede ser datos, una lista de nodos secundarios sin claves o un dict que es básicamente un nuevo objeto JSON. No puedes simplemente revisar cada nodo por su nombre, datos e hijos como lo harías con un árbol regular.
def depthFirstSearch(self, jsonobj, target, parentKey=None):
if isinstance(jsonobj, dict):
for key, value in jsonobj.items():
if isinstance(value, (dict, list)):
self.depthFirstSearch(value, target, key)
else: # "data" node
if key == target and parentKey not in self.parentsToExclude:
self.results.append(value)
self.parents[parentKey] += 1
if isinstance(jsonobj, list):
for value in jsonobj:
#lists don''t have keys, pass along key from last dict
self.depthFirstSearch(value, target, parentKey)
Si está utilizando Python 2.6 o posterior, use la biblioteca json
incorporada. De lo contrario, use simplejson
que tiene exactamente la misma interfaz.
Puede hacerlo de forma adaptativa sin tener que comprobar la versión de Python, utilizando un código como el siguiente:
try:
import json
except ImportError:
import simplejson as json
Luego, use json.loads()
o lo que sea apropiado.
import urllib2
import json
u = urllib2.urlopen(''http://www.reddit.com/.json'')
print json.load(u)
u.close()