2010-02-25 13 views
19

Obtengo mi JSON de reddit.com, esencialmente something like this. 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 ¿necesito recurrir a través del JSON para obtener lo que necesito?Cómo decodificar JSON con Python

Gracias de antemano.

+0

Cuando buscó en Python y JSON, ¿qué encontró? ¿Has probado "Python Library JSON"? ¿Qué viste? –

+34

Cuando busqué en Google python decode json encontré esta publicación .... – Grummle

Respuesta

23

Si está utilizando Python 2.6 o posterior, use la biblioteca incorporada json. De lo contrario, use simplejson, que tiene exactamente la misma interfaz.

Usted puede hacer esto de forma adaptativa sin tener que comprobar la versión de Python sí mismo, utilizando código como el siguiente:

try: 
    import json 
except ImportError: 
    import simplejson as json 

A continuación, utilice json.loads() o lo que sea, según corresponda.

+2

Tenga en cuenta que una url abierta da un objeto similar a un archivo, por lo que 'json.load' es probablemente la función adecuada. –

0

Supongo que analizará los datos en un diccionario y luego extraerá los bits relevantes de él.

Puede analizar JSON en Python usando adecuada python library

13
import urllib2 
import json 

u = urllib2.urlopen('http://www.reddit.com/.json') 
print json.load(u) 
u.close() 
0

Hay dos maneras en que puede "descifrar" JSON con Python, después de que haya analizados en dicts y listas con la biblioteca JSON.

En primer lugar, para acceder a él por los índices, así:

url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']] 

O bien, puede iterar sobre la estructura de árbol. La función de ejemplo siguiente no es de propósito general, simplemente ilustra que debe considerar los tres tipos diferentes de "nodos" de JSON de forma diferente 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 se puede ejecutar revisando cada nodo por su nombre, datos e hijos como lo haría con un árbol normal.

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) 
Cuestiones relacionadas