Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🌐 Add Russian translation for docs/ru/docs/tutorial/encoder.md
- Loading branch information
Showing
1 changed file
with
42 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# JSON кодировщик | ||
|
||
В некоторых случаях может потребоваться преобразование типа данных (например, Pydantic-модели) в тип, совместимый с JSON (например, `dict`, `list` и т.д.). | ||
|
||
Например, если необходимо хранить его в базе данных. | ||
|
||
Для этого **FastAPI** предоставляет функцию `jsonable_encoder()`. | ||
|
||
## Использование `jsonable_encoder` | ||
|
||
Представим, что у вас есть база данных `fake_db`, которая принимает только JSON-совместимые данные. | ||
|
||
Например, он не принимает объекты `datetime`, так как они не совместимы с JSON. | ||
|
||
Так, объект `datetime` должен быть преобразован в `str` в <a href="https://en.wikipedia.org/wiki/ISO_8601" class="external-link" target="_blank">ISO формате</a>. | ||
|
||
Точно так же эта база данных не получит Pydantic модель (объект с атрибутами), а только `dict`. | ||
|
||
Для этого можно использовать `jsonable_encoder`. | ||
|
||
Он принимает объект, например, модель Pydantic, и возвращает версию, совместимую с JSON: | ||
|
||
=== "Python 3.10+" | ||
|
||
```Python hl_lines="4 21" | ||
{!> ../../../docs_src/encoder/tutorial001_py310.py!} | ||
``` | ||
|
||
=== "Python 3.6+" | ||
|
||
```Python hl_lines="5 22" | ||
{!> ../../../docs_src/encoder/tutorial001.py!} | ||
``` | ||
|
||
В данном примере она преобразует Pydantic модель в `dict`, а `datetime` - в `str`. | ||
|
||
Результатом его вызова является объект, который может быть закодирован с помощью стандартной библиотеки Python <a href="https://docs.python.org/3/library/json.html#json.dumps" class="external-link" target="_blank">`json.dumps()`</a>. | ||
|
||
Функция не возвращает большой `str`, содержащий данные в формате JSON (в виде строки). Она возвращает стандартную структуру данных Python (например, `dict`) со значениями и подзначениями, которые совместимы с JSON. | ||
|
||
!!! note "Технические детали" | ||
`jsonable_encoder` фактически используется **FastAPI** внутри системы для преобразования данных. Однако он полезен и во многих других сценариях. |