JSON

Тема дорожной карты · Backend разработчик

JSON (JavaScript Object Notation) — лёгкий, текстовый формат сериализации данных, ставший универсальным языком REST API и веб-сервисов благодаря читаемости для человека и нативной поддержке во всех языках программирования и браузерах. JSON представляет данные в виде пар ключ-значение и упорядоченных массивов с минимальным синтаксисом — строки, числа, булевы значения, null, объекты {} и массивы [], — что делает его значительно менее многословным, чем XML, при этом простым для инспекции и отладки. В Node.js JSON.parse(string) десериализует JSON-строку в JavaScript-объект, а JSON.stringify(object, null, 2) сериализует её обратно; в Python аналогичные функции — json.loads() / json.dumps(), в Go — json.Unmarshal() / json.Marshal() из пакета encoding/json. JSON является форматом тела по умолчанию для запросов и ответов REST API (объявляется через Content-Type: application/json), форматом полезной нагрузки для большинства WebSocket-сообщений и структурой, используемой в JWT-токенах, где заголовок и claims являются Base64URL-закодированными JSON-объектами. Когда требуется строгая валидация, JSON Schema (проверяется с помощью ajv в Node.js или jsonschema в Python) обеспечивает соответствие типов, обязательных полей и ограничений на границах API; для сценариев с ограниченной полосой пропускания JSON заменяется Protocol Buffers (Protobuf) или MessagePack, кодирующими эквивалентные данные в 3–10 раз меньшим числом байт.

Как это работает

JSON — что вы шлёте по сети и как кодируете: JSON (текст, читаем, повсеместный), Protobuf (бинарь, требует схему, дефолт gRPC), MessagePack (бинарь, JSON-like, меньше), CBOR (бинарь, IoT-friendly), XML (legacy, многословный), Avro (schema-evolving, big-data экосистема). Для конфига: YAML (удобно писать, хрупкие отступы), TOML (яснее YAML), JSON (точно, но уродливо для человека). Формат времени: ISO 8601 / RFC 3339 с явной таймзоной.

Когда применять

JSON — для публичных REST API: клиенты на любом языке его читают. Protobuf — для high-traffic internal RPC (меньше, быстрее, schema-versioned). Avro — для аналитических пайплайнов (Kafka + schema registry). Всегда указывайте кодировку (Content-Type: application/json; charset=utf-8). Datetime — UTC + ISO 8601, локаль клиент сам выставит. Никогда locale-зависимые числовые форматы (1,000 vs 1.000).

Типичные ошибки

Ловушки JSON: тихо храните локальное время без таймзоны (DST-баги, off-by-N-часов навсегда); JSON без схемы — клиенты гадают, какие поля есть (OpenAPI / JSON Schema чинит); float для денег (используйте копейки как integer или decimal-тип); BOM-prefixed UTF-8 ломает парсеры; вера в порядок ключей JSON (нет гарантии).

Связанные понятия

Полезные ресурсы