json.vertederos vs matraz.jsonify


No estoy seguro de entender el propósito del método flask.jsonify. Intento hacer una cadena JSON a partir de esto:

data = {"id": str(album.id), "title": album.title}

Pero lo que obtengo con json.dumps difiere de lo que obtengo con flask.jsonify.

json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}]
flask.jsonify(data): {"id":…, "title":…}

Obviamente necesito obtener un resultado que se parezca más a lo que devuelve json.dumps. ¿Qué estoy haciendo mal?

Author: Phillip, 2011-10-26

4 answers

La función jsonify() en flask devuelve un objeto flask.Response() que ya tiene el encabezado de tipo de contenido apropiado 'application/json' para usar con respuestas json. Considerando que, el método json.dumps() solo devolverá una cadena codificada, lo que requeriría agregar manualmente el encabezado de tipo MIME.

Vea más sobre la función jsonify() aquí para una referencia completa.

Editar: Además, he notado que jsonify() maneja kwargs o diccionarios, mientras que json.dumps() adicionalmente soporta listas y otros.

 248
Author: Kenneth Wilke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-10 15:52:54

Puedes hacer:

flask.jsonify(**data)

O

flask.jsonify(id=str(album.id), title=album.title)
 82
Author: mikerobi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-16 01:15:13

Esto es flask.jsonify()

def jsonify(*args, **kwargs):
    if __debug__:
        _assert_have_json()
    return current_app.response_class(json.dumps(dict(*args, **kwargs),
        indent=None if request.is_xhr else 2), mimetype='application/json')

El json módulo utilizado es simplejson o json en ese orden. current_app es una referencia al objeto Flask(), es decir, su aplicación. response_class() es una referencia a la clase Response().

 59
Author: Michael Ekoka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 20:41:25

La elección de uno u otro depende de lo que se pretende hacer. Por lo que entiendo:

  • Jsonify sería útil cuando se está construyendo una API alguien consultaría y esperaría json a cambio. Por ejemplo: La API REST github podría usar este método para responder a tu solicitud.

  • Dumps , se trata más de formatear objetos de datos/python en json y trabajar en él dentro de su aplicación. Por ejemplo, necesito pasar un objeto a mi capa de representación donde algunos javascript mostrará gráfico. Alimentarás javascript con el Json generado por los volcados.

 25
Author: chaiyachaiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-17 20:38:34