You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.9 KiB

JSON-kompatibler Encoder

Es gibt Fälle, da möchten Sie einen Datentyp (etwa ein Pydantic-Modell) in etwas konvertieren, das kompatibel mit JSON ist (etwa ein dict, eine liste, usw.).

Zum Beispiel, wenn Sie es in einer Datenbank speichern möchten.

Dafür bietet FastAPI eine Funktion jsonable_encoder().

jsonable_encoder verwenden

Stellen wir uns vor, Sie haben eine Datenbank fake_db, die nur JSON-kompatible Daten entgegennimmt.

Sie akzeptiert zum Beispiel keine datetime-Objekte, da die nicht kompatibel mit JSON sind.

Ein datetime-Objekt müsste also in einen str umgewandelt werden, der die Daten im ISO-Format enthält.

Genauso würde die Datenbank kein Pydantic-Modell (ein Objekt mit Attributen) akzeptieren, sondern nur ein dict.

Sie können für diese Fälle jsonable_encoder verwenden.

Es nimmt ein Objekt entgegen, wie etwa ein Pydantic-Modell, und gibt eine JSON-kompatible Version zurück:

//// tab | Python 3.10+

{!> ../../docs_src/encoder/tutorial001_py310.py!}

////

//// tab | Python 3.8+

{!> ../../docs_src/encoder/tutorial001.py!}

////

In diesem Beispiel wird das Pydantic-Modell in ein dict, und das datetime-Objekt in ein str konvertiert.

Das Resultat dieses Aufrufs ist etwas, das mit Pythons Standard-json.dumps() kodiert werden kann.

Es wird also kein großer str zurückgegeben, der die Daten im JSON-Format (als String) enthält. Es wird eine Python-Standarddatenstruktur (z. B. ein dict) zurückgegeben, mit Werten und Unterwerten, die alle mit JSON kompatibel sind.

/// note | Hinweis

jsonable_encoder wird tatsächlich von FastAPI intern verwendet, um Daten zu konvertieren. Aber es ist in vielen anderen Szenarien hilfreich.

///