Una diferencia notable en Python 2 es que si estás usando ensure_ascii=False
,dump
escribirá correctamente los datos codificados UTF-8 en el archivo (a menos que haya utilizado cadenas de 8 bits con caracteres extendidos que no sean UTF-8):
dumps
por otro lado, con ensure_ascii=False
puede producir un str
o unicode
solo dependiendo de los tipos que usó para las cadenas:
Serialice el obj a una cadena con formato JSON utilizando esta tabla de conversión. Si sure_ascii es False, el resultado puede contener caracteres no ASCII y el valor de retorno puede ser una unicode
instancia .
(énfasis mío). Tenga en cuenta que aún puede ser una str
instancia también.
Por lo tanto, no puede usar su valor de retorno para guardar la estructura en un archivo sin verificar qué formato se devolvió y posiblemente jugar con él unicode.encode
.
Esto, por supuesto, ya no es una preocupación válida en Python 3, ya que no hay más esta confusión de 8 bits / Unicode.
En cuanto a load
vs loads
, load
considera que todo el archivo es un documento JSON, por lo que no puede usarlo para leer varios documentos JSON limitados de nueva línea de un solo archivo.