¿Cómo escribo datos JSON en un archivo?
Tengo datos JSON almacenados en la variable data
.
Quiero escribirlo en un archivo de texto para probarlo y no tener que coger los datos del servidor cada vez.
Actualmente, estoy probando esto:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
Y estoy recibiendo el error:
TypeError: must be string or buffer, not dict
¿Cómo se arregla esto?
982
3
Te olvidaste de la parte real de JSON -
data
es un diccionario y aún no está codificado en JSON. Escríbelo así para una máxima compatibilidad (Python 2 y 3):En un sistema moderno (es decir, Python 3 y soporte UTF-8), puedes escribir un archivo más bonito con
Para obtener un archivo utf8-codificado en lugar de ascii-codificado en la respuesta aceptada para Python 2 utilice:
El código es más sencillo en Python 3:
En Windows, el argumento
encoding='utf-8'
paraopen
sigue siendo necesario.Para evitar el almacenamiento de una copia codificada de los datos en la memoria (resultado de
dumps
) y para dar salida a bytestrings codificados en utf8 tanto en Python 2 como en 3, utilice:La llamada
codecs.getwriter
es redundante en Python 3 pero necesaria para Python 2.Lectura y tamaño:
El uso de
ensure_ascii=False
proporciona una mejor legibilidad y un menor tamaño:Mejora aún más la legibilidad añadiendo las banderas
indent=4, sort_keys=True
(como sugiere dinos66) a los argumentos dedump
odumps
. De este modo, obtendrá una estructura ordenada y bien indentada en el archivo json a costa de un tamaño de archivo ligeramente mayor.Yo respondería con una ligera modificación con las respuestas antes mencionadas y es escribir un archivo JSON embellecido que los ojos humanos puedan leer mejor. Para ello, pase
sort_keys
comoTrue
yindent
con 4 caracteres de espacio y usted es bueno para ir. También asegúrese de que los códigos ascii no se escriban en su archivo JSON: