Solución:
Use la herramienta adecuada para el trabajo, no está analizando JSON sino Python, así que use ast.literal_eval()
en lugar de:
>>> import ast
>>> ast.literal_eval('["a", "b", "c"]')
['a', 'b', 'c']
>>> ast.literal_eval("['a', 'b', 'c']")
['a', 'b', 'c']
>>> ast.literal_eval('["mixed", 'quoting', """styles"""]')
['mixed', 'quoting', 'styles']
-
Los documentos JSON siempre usan comillas dobles para cadenas, use UTF-16 para
uhhhh
sintaxis de escape hexadecimal, tener{...}
objetos para pares clave-valor con claves siempre cadenas y secuencias[...]
listas y usonull
,true
yfalse
valores; tenga en cuenta los valores booleanos en minúscula. Los números vienen en formas enteras y de coma flotante. -
En Python, las representaciones de cadenas pueden usar comillas simples y dobles, los escapes Unicode usan
uhhhh
yUhhhhhhhh
formularios (sin pares sustitutos UTF-16), diccionarios con{...}
la sintaxis de visualización puede tener claves de muchos tipos diferentes en lugar de solo cadenas, las secuencias pueden ser listas ([...]
) pero también puede usar tuplas ((...)
), o aún podría tener otros tipos de contenedores. Python tieneNone
,True
yFalse
(¡Titlecase!) Y los números vienen en enteros, flotantes y formas complejas.
Confundir uno con el otro puede dar lugar a errores de análisis o problemas sutiles cuando la decodificación se realizó correctamente, pero los datos se han interpretado incorrectamente, como con puntos de código que no son BMP escapados, como Emoji. ¡Asegúrate de usar el método correcto para decodificarlos! Y en la mayoría de los casos, cuando tiene datos de sintaxis de Python, alguien realmente usó el método incorrecto de codificación y solo produjo accidentalmente representaciones de Python. Vea si la fuente necesita arreglarse en ese caso; por lo general, la salida se produjo utilizando str(object)
dónde json.dumps(obj)
debería haberse utilizado en su lugar.