Red de conocimiento informático - Material del sitio web - La diferencia entre usar jsonify y json.dumps en flask

La diferencia entre usar jsonify y json.dumps en flask

1. El tipo de contenido es diferente

La función de jsonify es en realidad serializar los datos entrantes en formato json en una cadena json como el cuerpo de la respuesta y establecer el tipo de contenido de la respuesta en la aplicación. /json para generar una respuesta para el cliente. Parte del código fuente de jsonify es el siguiente:

def jsonify(*args, **kwargs):

if __debug__:

_assert_have_json()

return current_app.response_class(json.dumps(dict(*args, **kwargs),

indent=Ninguno si request.is_xhr else 2), mimetype='application/json' )

Se puede ver que jsonify es en realidad json.dumps que se usa para serializar datos. sangría representa la sangría en formato json. Si se trata de una solicitud de Ajax, no se sangrará (porque los datos de Ajax generalmente no necesitan mostrarse directamente); de lo contrario, se sangrarán 2 fotogramas. Pero a partir de los resultados experimentales de la primera parte se debe ver que jsonify se usa cuando el valor del campo Tipo de contenido de la respuesta es application/json, y json.dumps se usa cuando el valor del campo es text/html. El tipo de contenido determina cómo la parte que recibe los datos ve y procesa los datos. Si es una aplicación/json, se puede procesar directamente como un objeto json. Si es texto/html, el objeto de texto también se puede convertir en un json. Objeto, y luego lo abordaré nuevamente (comprensión personal, corríjame si hay algún error).

2. Aceptar diferentes parámetros

jsonify puede aceptar los mismos parámetros que el constructor dict de Python, como se muestra a continuación.

Y json.dumps puede aceptar más parámetros de tipo lista y algunos otros tipos de parámetros que jsonify. Pero probé la forma de parámetro como clave1=valor1,[clave2=valor2,...] pero no funciona, informa "TypeError: dumps() toma exactamente 1 argumento (0 dado)" (TypeError: dumps() toma exactamente 1 argumento (0 dado)) error, mientras que jsonify no informa el error y puede devolver datos normalmente.

Finalmente, podemos usar el método make_response en flask o directamente a través de la clase Response para lograr el mismo efecto que usar jsonify configurando el parámetro mimetype, pero ¿por qué no escribir algo de código? Además, es más simple y menos propenso a errores. Cuantos más parámetros, más problemático será depurar y mantener. Por supuesto, el uso no es absoluto y, si es necesario, se puede decidir en función de las condiciones de procesamiento de datos de front-end.