Flask JSON
El módulo JSON de Flask proporciona funcionalidad de serialización/deserialización, utilizando por defecto la biblioteca estándar de Python json, que puede reemplazarse mediante JSONProvider.
Forma de importación:
from flask import jsonify
o
from flask.json import dumps, loads
Función jsonify
La función más utilizada para construir respuestas JSON. Serializa objetos de Python en una Response JSON.
| Uso | Descripción |
|---|---|
| jsonify(*args, **kwargs) | Serializa los parámetros a JSON, devuelve una Response (Content-Type: application/json) |
| jsonify(dict) | Serializa un diccionario como respuesta JSON |
| jsonify(key=value, ...) | Serializa argumentos de palabra clave como respuesta JSON |
dumps / loads / dump / load
| Función | Firma | Descripción |
|---|---|---|
| dumps | (obj, *, skipkeys=False, ensure_ascii=True, ...) | Serializa un objeto de Python a una cadena JSON |
| loads | (s, *, ...) | Deserializa una cadena JSON a un objeto de Python |
| dump | (obj, fp, *, ...) | Serializa un objeto de Python y lo escribe en un archivo |
| load | (fp, *, ...) | Lee de un archivo y deserializa JSON |
Clase JSONProvider
Clase base personalizable para el procesador JSON. Para reemplazar la implementación JSON predeterminada, hereda de esta clase y sobrescribe los métodos correspondientes.
| Métodos | Descripción |
|---|---|
| dumps(obj, **kwargs) | Serializa un objeto a una cadena JSON |
| loads(s, **kwargs) | Deserializa desde una cadena JSON a un objeto de Python |
| response(obj) | Convierte un objeto a una Response JSON. Se usa para jsonify y al devolver dict/list |
DefaultJSONProvider
Implementación JSONProvider predeterminada, basada en la biblioteca estándar de Python json.
| Atributos/Métodos | Descripción |
|---|---|
| ensure_ascii | Si escapar caracteres no ASCII. Puede establecerse en False para admitir salida en chino |
| sort_keys | Si ordenar la salida por clave. Por defecto es True |
| compact | Si usar salida compacta (sin espacios). Por defecto es False |
Serialización JSON Tag
flask.json.tagEl módulo admite la serialización de más tipos de Python, como datetime, tuple, set, etc.
| Etiqueta | Tipo de Python correspondiente |
|---|---|
| JSONTaggedJSONSerializer | Serializador mejorado, utilizado por defecto por Session. Admite formato JSON con etiquetas |
Ejemplo de código
Ejemplo
from flask import Flask, jsonify
app = Flask(__name__)
@app.get("/api/me")
def me():
# Devuelve un dict, Flask llama automáticamente a jsonify
return {
"username": "ejemplo",
"email": "[email protected]",
"roles": ["admin", "editor"]
}
@app.get("/api/users")
def users():
# Devuelve una list, Flask llama automáticamente a jsonify
return [
{"id": 1, "name": "ejemplo"},
{"id": 2, "name": "admin"}
]
@app.get("/api/status")
def status():
# Uso explícito de jsonify
return jsonify(status="ok", version="1.0")
# Configurar salida JSON en chino
app.json.ensure_ascii = False
# {"username": "ejemplo", "description": "descripción en chino"}
app = Flask(__name__)
@app.get("/api/me")
def me():
# Devuelve un dict, Flask llama automáticamente a jsonify
return {
"username": "ejemplo",
"email": "[email protected]",
"roles": ["admin", "editor"]
}
@app.get("/api/users")
def users():
# Devuelve una list, Flask llama automáticamente a jsonify
return [
{"id": 1, "name": "ejemplo"},
{"id": 2, "name": "admin"}
]
@app.get("/api/status")
def status():
# Uso explícito de jsonify
return jsonify(status="ok", version="1.0")
# Configurar salida JSON en chino
app.json.ensure_ascii = False
# {"username": "ejemplo", "description": "descripción en chino"}