# JSON з байтами як Base64 { #json-with-bytes-as-base64 }

Якщо ваш застосунок має отримувати і надсилати дані JSON, але потрібно включати туди двійкові дані, ви можете кодувати їх як base64.

## Base64 проти файлів { #base64-vs-files }

Насамперед розгляньте, чи можете ви використати [Файли запиту](../tutorial/request-files.md) для завантаження двійкових даних і [Користувацька відповідь - FileResponse](./custom-response.md#fileresponse--fileresponse-) для надсилання двійкових даних замість кодування їх у JSON.

JSON може містити лише строки, закодовані в UTF-8, тому він не може містити «сирі» байти.

Base64 може кодувати двійкові дані у строках, але для цього потрібно більше символів, ніж у початкових двійкових даних, тож зазвичай це менш ефективно, ніж звичайні файли.

Використовуйте base64 лише якщо справді потрібно включати двійкові дані в JSON і ви не можете використати файли для цього.

## Pydantic `bytes` { #pydantic-bytes }

Ви можете оголосити модель Pydantic з полями `bytes`, а потім використати `val_json_bytes` у конфігурації моделі, щоб вказати їй використовувати base64 для перевірки вхідних даних JSON; як частина цієї перевірки, вона декодує строку base64 у байти.

{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}

Якщо ви перевірите `/docs`, там буде показано, що поле `data` очікує байти, закодовані в base64:

<div class="screenshot">
<img src="/img/tutorial/json-base64-bytes/image01.png">
</div>

Ви можете надіслати запит так:

```json
{
    "description": "Some data",
    "data": "aGVsbG8="
}
```

/// tip | Порада

`aGVsbG8=` - це кодування base64 для `hello`.

///

Після цього Pydantic декодує строку base64 і надасть вам початкові байти в полі моделі `data`.

Ви отримаєте відповідь приблизно таку:

```json
{
  "description": "Some data",
  "content": "hello"
}
```

## Pydantic `bytes` для вихідних даних { #pydantic-bytes-for-output-data }

Ви також можете використовувати поля `bytes` з `ser_json_bytes` у конфігурації моделі для вихідних даних, і Pydantic серіалізує байти як base64 під час формування відповіді JSON.

{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}

## Pydantic `bytes` для вхідних і вихідних даних { #pydantic-bytes-for-input-and-output-data }

І, звісно, ви можете використовувати ту саму модель, налаштовану на base64, щоб обробляти і вхідні дані (перевіряти) з `val_json_bytes`, і вихідні дані (серіалізувати) з `ser_json_bytes` під час отримання та надсилання даних JSON.

{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
