Mi proyecto actualmente está recibiendo un mensaje JSON en Python del cual necesito obtener fragmentos de información. A los efectos de esto, configurémoslo en un JSON simple en una cadena:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Hasta ahora he estado generando solicitudes JSON usando una lista y luego json.dumps
, pero para hacer lo contrario de esto, creo que necesito usar json.loads
. Sin embargo, no he tenido mucha suerte con eso. ¿Podría alguien proporcionarme un fragmento que volvería "2"
con la entrada de "two"
en el ejemplo anterior?
'
delimitadores de cadena de comillas simples, puede haber creado accidentalmente representaciones de cadenas para los diccionarios de Python. JSON siempre usará"
delimitadores . Si es así, repare su código que produce esa salida para usar enjson.dumps()
lugar destr()
orepr()
, y diríjase a Convertir una representación de cadena de un diccionario en un diccionario. para descubrir cómo recuperar sus datos de Python. ¿Otras pistas tienes un literal de Python? BusqueNone
,True
oFalse
, JSON usaríanull
,true
yfalse
.'
delimitadores de cadena de comillas simples), también echen un vistazo aquí: stackoverflow.com/questions/41168558/…Respuestas:
Muy simple:
fuente
import simplejson as json
. Olvidé mencionarlo pero gracias :).load
método en lugar de.loads
A veces tu json no es una cadena. Por ejemplo, si obtiene un json de una URL como esta:
necesitará usar json.load, no json.loads:
(es fácil de olvidar: la 's' es para 'cadena')
fuente
Para URL o archivo, use
json.load()
. Para cadenas con contenido .json, usejson.loads()
.fuente
El siguiente es un ejemplo simple que puede ayudarlo:
La salida para el código anterior será:
Tenga en cuenta que puede configurar el argumento ident de dump para imprimirlo así (por ejemplo, cuando usa print json.dumps (data, indent = 4)):
fuente
Puede usar módulos json o ast python:
fuente
ast.literal_eval()
función para JSON, porque más allá de sus ejemplos triviales de solo texto y enteros, se encontrará con problemas. JSON no es Python . El hecho de que algunos JSON se puedan analizarast.literal_eval()
no hace que sea un enfoque adecuado.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
usandoast.literal_eval()
, porque contiene valores nulos, un valor booleano y un único punto de código no BMP. JSON representa esos valores de manera diferente a cómo los literales de Python los representarían.json.loads()
por el contrario, no tiene problemas con eso de entrada y decodifica correctamente que a{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
es un poco más lento y no se puede personalizar. Nunca debe usarlo para decodificar JSON .