БлогУслугиКарьера
Обсудить проект
БлогУслугиКарьераОбсудить проект
Разработка

JSON: форматирование, минификация и валидация — полное руководство

Всё о работе с JSON: как форматировать, минифицировать и валидировать данные. Частые ошибки, инструменты, примеры из реальных проектов.

Редакция Feature
Редакция Feature·
8 апр
·
10 мин
·
JSON: форматирование, минификация и валидация — полное руководство

JSON встречается в работе разработчика каждый день: ответы API, конфиги, localStorage, вебхуки. Большинство умеет с ним работать — но не все понимают нюансы, из-за которых приложения ломаются в продакшне.

В этой статье — всё, что нужно знать о JSON: спецификация, распространённые ошибки, инструменты для форматирования и отладки.

Что такое JSON и почему он стал стандартом

JSON (JavaScript Object Notation) — текстовый формат обмена данными, описанный в RFC 8259. Несмотря на название, JSON не зависит от JavaScript — его поддерживают все современные языки: Python, Go, Rust, PHP, Java, Ruby.

До JSON доминировал XML. Он был мощным, но громоздким: теги занимали больше места, чем данные. JSON предложил компромисс — читаемый людьми формат с минимальным оверхедом. В 2005–2010 годах REST API на JSON вытеснил SOAP/XML почти везде.

Сегодня JSON — это:

  • Формат ответов большинства REST API
  • Формат конфигов: package.json, tsconfig.json, .eslintrc
  • Формат хранения данных в NoSQL-базах (MongoDB, Firestore)
  • Формат обмена в вебхуках (Telegram, Stripe, GitHub)
  • Формат хранения состояния в localStorage/sessionStorage

Синтаксис JSON: полная спецификация

JSON поддерживает шесть типов данных:

{
  "строка": "текст в двойных кавычках",
  "число": 42,
  "дробное": 3.14,
  "булево": true,
  "пустое": null,
  "массив": [1, 2, 3],
  "объект": { "ключ": "значение" }
}

Несколько правил, которые нарушают чаще всего:

Только двойные кавычки. Одиночные кавычки — ошибка. Строки 'text' и 'key' не являются валидным JSON.

Ключи объектов — всегда строки. {name: "Ivan"} — это JavaScript, но не JSON. В JSON обязательно: {"name": "Ivan"}.

Нет trailing comma. Запятая после последнего элемента запрещена:

// Ошибка
{"a": 1, "b": 2,}

// Правильно
{"a": 1, "b": 2}

Нет комментариев. JSON не поддерживает // и /* */. Если нужны комментарии в конфиге — используйте JSONC или YAML.

Нет специальных числовых значений. NaN, Infinity, -Infinity — не JSON. Их нужно заменить на null или строку.

Форматирование JSON: зачем и как

Сырой JSON из API выглядит так:

{"id":1,"name":"Иван Петров","email":"ivan@example.ru","orders":[{"id":101,"total":2500},{"id":102,"total":1800}]}

После форматирования:

{
  "id": 1,
  "name": "Иван Петров",
  "email": "ivan@example.ru",
  "orders": [
    {
      "id": 101,
      "total": 2500
    },
    {
      "id": 102,
      "total": 1800
    }
  ]
}

Читаемость — главная цель форматирования. Отладка, код-ревью, документирование API — везде отформатированный JSON понятнее.

Форматирование в разных инструментах

Браузер: воспользуйтесь нашим JSON форматировщиком онлайн — вставьте JSON, нажмите «Форматировать». Работает без регистрации, данные не покидают браузер.

JavaScript:

const formatted = JSON.stringify(data, null, 2); // 2 пробела
const formatted4 = JSON.stringify(data, null, 4); // 4 пробела

Python:

import json
formatted = json.dumps(data, indent=2, ensure_ascii=False)

Терминал (jq):

cat response.json | jq .
# или
curl https://api.example.com/data | jq .

Postman: автоматически форматирует ответ на вкладке «Pretty».

Минификация JSON: когда убирать пробелы

Минификация убирает все незначимые пробелы и переносы строк. Цель — уменьшить размер.

// До минификации — 120 байт
{
  "user": {
    "id": 1,
    "name": "Иван"
  }
}

// После — 33 байта
{"user":{"id":1,"name":"Иван"}}

Когда минификация важна:

  • API-ответы с высокой нагрузкой. 1000 запросов в секунду × 2 КБ экономии = 2 МБ/сек меньше трафика.
  • Хранение в Redis. Меньше байт — дешевле хранение и быстрее сериализация.
  • Передача в URL-параметрах. Минифицированный JSON легче закодировать в Base64 и передать как query-параметр.

Минифицировать JSON для передачи в API умеет любой клиент автоматически. Явная минификация нужна при сохранении или ручной передаче данных. Попробуйте JSON минификатор онлайн — он мгновенно убирает все лишние символы.

Строите приложение с API?

Разработаем REST API, настроим интеграции и научим ваш бизнес говорить на языке JSON

Заказать разработку

Валидация JSON: как найти ошибку

Типичные ошибки и их сообщения

Unexpected token ' in JSON at position 0 Использованы одиночные кавычки. Замените все ' на ".

Unexpected token } in JSON at position 45 Лишняя запятая перед закрывающей скобкой, или отсутствует значение.

Unexpected end of JSON input Незакрытая скобка или кавычка. Проверьте баланс {, [, ".

Unexpected token n in JSON at position 12 Встречается при передаче undefined — в JSON его нет, нужно заменить на null.

Валидация в коде

JavaScript:

function isValidJSON(str) {
  try {
    JSON.parse(str);
    return true;
  } catch {
    return false;
  }
}

Python:

import json

def is_valid_json(s: str) -> bool:
    try:
        json.loads(s)
        return True
    except json.JSONDecodeError:
        return False

Go:

import "encoding/json"

func isValidJSON(s string) bool {
    return json.Valid([]byte(s))
}

Валидация схемы (JSON Schema)

Проверить, что JSON не просто синтаксически верен, а соответствует ожидаемой структуре — задача JSON Schema. Это стандарт описания структуры JSON-документов.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "name", "email"],
  "properties": {
    "id": { "type": "integer" },
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" }
  }
}

В Python — библиотека jsonschema, в JS — ajv. Это особенно полезно при валидации входящих данных в API.

JSON vs другие форматы

JSON vs XML

Критерий JSON XML
Читаемость Высокая Средняя
Размер Меньше Больше
Поддержка типов Базовая Через схему
Комментарии Нет Есть
Атрибуты Нет Есть

XML всё ещё встречается в SOAP API и некоторых enterprise-системах (1С, банки). Для новых проектов — JSON.

JSON vs YAML

YAML — надмножество JSON (любой JSON является валидным YAML). YAML читается приятнее, поддерживает комментарии, многострочные строки. Используется в конфигах (Docker Compose, Kubernetes, GitHub Actions).

# YAML
user:
  id: 1
  name: Иван
  tags:
    - admin
    - editor
// JSON
{
  "user": {
    "id": 1,
    "name": "Иван",
    "tags": ["admin", "editor"]
  }
}

Для API-данных — JSON. Для конфигов инфраструктуры — YAML.

JSON vs MessagePack / Protocol Buffers

Когда производительность критична, бинарные форматы выигрывают: MessagePack компактнее JSON в 1.5–3 раза, Protocol Buffers ещё компактнее и типизированы. Используются в высоконагруженных системах, мобильных приложениях, микросервисах.

Для обычных веб-приложений разница несущественна — JSON удобнее.

Работа с JSON в реальных проектах

Сериализация дат

Один из частых источников проблем. JSON не имеет типа «дата» — используйте ISO 8601:

{
  "createdAt": "2026-04-08T10:30:00Z",
  "birthDate": "1990-03-15"
}

Не используйте Unix timestamp в явном виде — он нечитаем при отладке. Не используйте локализованные форматы вроде 08.04.2026 — они не поддаются сортировке.

Большие числа

JavaScript работает с числами как float64 — целые числа больше 2⁵³ теряют точность. Типичная проблема: ID из базы данных на 64-битном целом приходит в JavaScript и «округляется».

Решение — передавать большие числа как строки:

{
  "id": "9007199254740993",
  "amount": "1234567890123456"
}

Именно так поступает Twitter API с tweet ID, и именно поэтому Telegram Bot API возвращает chat_id как число, но рекомендует обрабатывать его как строку.

Вложенность и производительность

Глубоко вложенные JSON-структуры медленнее парсятся и занимают больше памяти. Если API возвращает объекты с уровнем вложенности 8–10+ — это сигнал к рефакторингу схемы данных.

Для мобильных клиентов оптимально держать вложенность не больше 3–4 уровней и использовать плоские структуры с ID-ссылками вместо полного вложения объектов.

Инструменты для работы с JSON

В браузере

  • JSON форматировщик Feature IT — форматирование, минификация, валидация. Данные не покидают браузер.
  • JSONLint — популярный валидатор с подсветкой ошибок
  • JSON Crack — визуализация JSON как граф (удобно для сложных структур)

В терминале

jq — must-have для работы с JSON в командной строке:

# Получить конкретное поле
curl https://api.github.com/users/torvalds | jq '.name'

# Фильтрация массива
cat users.json | jq '.[] | select(.age > 25)'

# Преобразование структуры
cat data.json | jq '{id: .user_id, name: .full_name}'

Python one-liner:

python3 -m json.tool response.json
# или для красивого вывода:
cat response.json | python3 -m json.tool | less

В редакторах кода

  • VS Code: встроенная команда «Format Document» (Shift+Alt+F) форматирует JSON. Расширение «Prettier» добавляет автоформатирование при сохранении.
  • JetBrains IDE: встроенный форматировщик, плагин JSON Schema для валидации.

В коде

JavaScript/TypeScript:

// Безопасный парсинг с фолбэком
function safeParse<T>(json: string, fallback: T): T {
  try {
    return JSON.parse(json) as T;
  } catch {
    return fallback;
  }
}

// Сериализация с обработкой циклических ссылок
import stringify from 'safe-stringify';

Python:

import json
from typing import Any

# Сохранение с отступами и кириллицей
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

# Загрузка из файла
with open('input.json', encoding='utf-8') as f:
    data = json.load(f)

Итого

JSON — простой формат с несколькими важными ограничениями. Большинство проблем в реальных проектах возникает из-за:

  1. Неправильного синтаксиса (одиночные кавычки, trailing comma)
  2. Несогласованного формата дат
  3. Потери точности при работе с большими числами в JavaScript
  4. Отсутствия валидации входящих данных по схеме

Держите JSON форматировщик под рукой для быстрой отладки. Для серьёзных проектов — настраивайте JSON Schema валидацию на уровне API.

Если работаете с REST API и нужна помощь с архитектурой или разработкой — расскажите нам о проекте.

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Содержание
  • Что такое JSON и почему он стал стандартом
  • Синтаксис JSON: полная спецификация
  • Форматирование JSON: зачем и как
  • Минификация JSON: когда убирать пробелы
  • Валидация JSON: как найти ошибку
  • JSON vs другие форматы
  • Работа с JSON в реальных проектах
  • Инструменты для работы с JSON
  • Итого
Поделиться:

Похожие статьи

Стоит ли учить Python в 2026 году: 7 причин, почему — однозначно да
Python

Стоит ли учить Python в 2026 году: 7 причин, почему — однозначно да

12 мин
Дешёвый хостинг за 600 рублей обошёлся нам в 120 000 рублей простоя. Что мы выбрали потом
IT-поддержка

Дешёвый хостинг за 600 рублей обошёлся нам в 120 000 рублей простоя. Что мы выбрали потом

11 мин
Сотрудник работал из кафе без VPN — через неделю взломали корпоративную почту. Наш кейс
IT-поддержка

Сотрудник работал из кафе без VPN — через неделю взломали корпоративную почту. Наш кейс

11 мин
Feature IT

Feature IT — платформа по обучению программированию и разработке цифровых продуктов. Мы создаём современные веб-решения для бизнеса и обучаем этому других!

Политика конфиденциальностиПользовательское соглашение

О компании

  • Блог
  • Карьера

Услуги разработки

  • Разработка сайтов под ключ
  • Веб-приложения на React/Next.js
  • Telegram-боты для бизнеса
  • Mini Apps (Telegram, VK)
  • SEO-оптимизированные сайты
  • Автоматизация бизнес-процессов
  • Поддержка и развитие IT-продуктов

Обучение

  • Курс Python с нуля
  • Алгоритмы и структуры данных
  • Паттерны проектирования
  • Подготовка к собеседованиям в IT
  • Практика на реальных проектах

Инструменты

  • Генератор UTM-меток
  • Счётчик символов