Aller au contenu

Encodeur compatible JSON

🌐 Traduction par IA et humains

Cette traduction a été réalisée par une IA guidée par des humains. 🤝

Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖

Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.

Version anglaise

Il existe des cas où vous pourriez avoir besoin de convertir un type de données (comme un modèle Pydantic) en quelque chose de compatible avec JSON (comme un dict, list, etc.).

Par exemple, si vous devez le stocker dans une base de données.

Pour cela, FastAPI fournit une fonction jsonable_encoder().

Utiliser jsonable_encoder

Imaginons que vous ayez une base de données fake_db qui ne reçoit que des données compatibles JSON.

Par exemple, elle ne reçoit pas d'objets datetime, car ceux-ci ne sont pas compatibles avec JSON.

Ainsi, un objet datetime doit être converti en une str contenant les données au format ISO.

De la même manière, cette base de données n'accepterait pas un modèle Pydantic (un objet avec des attributs), seulement un dict.

Vous pouvez utiliser jsonable_encoder pour cela.

Elle reçoit un objet, comme un modèle Pydantic, et renvoie une version compatible JSON :

from datetime import datetime

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

fake_db = {}


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: str | None = None


app = FastAPI()


@app.put("/items/{id}")
def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item)
    fake_db[id] = json_compatible_item_data

Dans cet exemple, elle convertirait le modèle Pydantic en dict, et le datetime en str.

Le résultat de son appel est quelque chose qui peut être encodé avec la fonction standard de Python json.dumps().

Elle ne renvoie pas une grande str contenant les données au format JSON (sous forme de chaîne). Elle renvoie une structure de données standard de Python (par ex. un dict) avec des valeurs et sous-valeurs toutes compatibles avec JSON.

Remarque

jsonable_encoder est en fait utilisée par FastAPI en interne pour convertir des données. Mais elle est utile dans de nombreux autres scénarios.