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,TrueoFalse, JSON usaríanull,trueyfalse.'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 :).loadmétodo en lugar de.loadsA 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 .