Dos problemas con las respuestas dadas hasta ahora, si, por ejemplo, uno transmite ese JSON no estándar. Porque entonces uno podría tener que interpretar una cadena entrante (no un diccionario de Python).
Problema 1 - demjson
: Con Python 3.7. + Y usando conda no pude instalar demjson ya que obviamente no es compatible con Python> 3.5 actualmente. Entonces necesito una solución con medios más simples, por ejemplo ast
y / o json.dumps
.
Problema 2 - ast
& json.dumps
: Si un JSON tiene comillas simples y contiene una cadena en al menos un valor, que a su vez contiene comillas simples, la única solución simple pero práctica que he encontrado es aplicar ambos:
En el siguiente ejemplo asumimos que line
es el objeto de cadena JSON entrante:
>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})
Paso 1: convierta la cadena entrante en un diccionario usando ast.literal_eval()
Paso 2: aplíquela json.dumps
para la conversión confiable de claves y valores, pero sin tocar el contenido de los valores :
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
json.dumps
por sí solo no haría el trabajo porque no interpreta el JSON, sino que solo ve la cadena. Similar para ast.literal_eval()
: aunque interpreta correctamente el JSON (diccionario), no convierte lo que necesitamos.