2011-10-14 31 views
142

Mi proyecto está recibiendo un mensaje JSON en python del que necesito extraer información. A los efectos de esta, que le permite configurar a algunos simples JSON en una cadena:Parse JSON en Python

jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}' 

Hasta ahora he estado generando peticiones JSON usando una lista y luego json.dumps sino para hacer lo contrario de esto, creo que necesito para usar json.loads pero no he tenido mucha suerte con eso. ¿Alguien podría proporcionarme un fragmento que devolvería "2" con la entrada de "dos" en el ejemplo anterior?

Respuesta

282

muy simple:

import json 
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}') 
print j['two'] 
+1

Gracias. Ahora me siento tonto, estaba tratando de hacerlo por índice ... –

+0

Además, eche un vistazo a [simplejson] (http://code.google.com/p/simplejson/) si necesita un mejor rendimiento. Las versiones más recientes brindan optimizaciones que mejoran en gran medida la lectura y la escritura. – Unode

+1

En realidad estoy usando simplejson: 'import simplejson as json'. Se olvidó de mencionar pero gracias :) –

60

A veces su JSON no es una cadena. Por ejemplo, si usted está recibiendo un JSON desde una URL como esta:

j = urllib2.urlopen('http://site.com/data.json') 

tendrá que utilizar json.load, no json.loads:

j_obj = json.load(j) 

(que es fácil de olvidar: la 's' es para 'cadena')

+1

¡No lo sabía, gracias! –

+0

Solo para agregar que puedes obtener el contenido de la cadena llamando a j.read() y luego usa el método de carga. De cualquier forma, en este caso, el método load() se encarga de llamar a .read() – redobot

23

Para URL o FILE, use json.load(). Para cadena que tenga contenido .json, use json.loads().

#! /usr/bin/python 

import json 
from pprint import pprint 

#json_file='a.json' 
json_file='my_cube.json' 
cube='1' 

json_data=open(json_file) 
data = json.load(json_data) 
#pprint(data) 
json_data.close() 

print "Dimension: ", data['cubes'][cube]['dim'] 
print "Measures: ", data['cubes'][cube]['meas'] 
15

siguiente es ejemplo sencillo que puede ayudarle a:

json_string = """ 
{ 
    "pk": 1, 
    "fa": "cc.ee", 
    "fb": { 
     "fc": "", 
     "fd_id": "12345" 
    } 
}""" 

import json 
data = json.loads(json_string) 
if data["fa"] == "cc.ee": 
    data["fb"]["new_key"] = "cc.ee was present!" 

print json.dumps(data) 

La salida para el código anterior será:

{"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345", 
"fc": ""}, "fa": "cc.ee"} 

Observe que puede establecer el argumento ident de volcado para imprimirlo así (por ejemplo, cuando se utiliza print json.dumps (data, indent = 4)):

{ 
    "pk": 1, 
    "fb": { 
     "new_key": "cc.ee was present!", 
     "fd_id": "12345", 
     "fc": "" 
    }, 
    "fa": "cc.ee" 
}