Saltar al contenido

¿Cómo comprimir / minimizar el tamaño de JSON / Jsonify con Flask en Python?

Solución:

Antigua pregunta, pero estaba buscando esto y fue el primer resultado en Google. El enlace a la respuesta de Leon tiene una solución no para Flask y además es antiguo. Con Python 3 ahora podemos hacer todo en pocas líneas con las bibliotecas estándar (y Flask):

from flask import make_response, json
import gzip

@app.route('/data.json')
def compress():
    very_long_content = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]
    content = gzip.compress(json.dumps(very_long_content).encode('utf8'), 5)
    response = make_response(content)
    response.headers['Content-length'] = len(content)
    response.headers['Content-Encoding'] = 'gzip'
    return response

Con gzip.compress tenemos directamente una cadena de bytes comprimida y se requiere como entrada una cadena de bytes. Luego, como el enlace de Leon, hacemos una respuesta personalizada diciendo que el contenido es un gzip para que el navegador se descomprima por sí mismo.

Para decodificar en Javascript usando una solicitud ajax de JQuery, no hay ninguna diferencia particular con una solicitud estándar:

$.ajax({
    url: '/data.json',
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
})

Tenga en cuenta que este fragmento comprime y luego envía el contenido largo. Debe considerar la cantidad de tiempo que lleva comprimir el contenido (especialmente en este caso que tenemos contenido muy extenso), así que asegúrese de establecer un nivel apropiado de compresión que no requiera más tiempo para comprimir + enviar que para enviar. el contenido largo tal como está.

Mi caso de uso fue que envié el contenido grande desde una conexión lenta, por lo que tuve todos los beneficios para comprimir el contenido antes de enviarlo.

Las solicitudes web son compatibles con GZip y puede implementarlo en Python.

Aquí hay alguien que hizo esa pregunta exacta. Cómo utilizar Content-Encoding: gzip con Python SimpleHTTPServer

Según el repositorio de flask-compress

La solución preferida es tener un servidor (como Nginx) que comprima automáticamente los archivos estáticos por usted.

Pero puedes hacerlo en matraz: https://github.com/colour-science/flask-compress.

Si sigue la ruta gzip, no necesitará eliminar los saltos de línea y los espacios en blanco, pero si aún así lo desea, de acuerdo con la documentación del matraz, puede deshabilitar la impresión bonita configurando JSONIFY_PRETTYPRINT_REGULAR en falso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *