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):
dumpspor otro lado, con ensure_ascii=Falsepuede producir un stro unicodesolo 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 unicodeinstancia .
(énfasis mío). Tenga en cuenta que aún puede ser una strinstancia 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 loadvs loads, loadconsidera 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.