Dev Блог: форматтеры JSON, SQL и XML для чистого кода
Форматирование JSON, SQL‑запросов и XML‑документов — одна из самых частых задач в разработке. Минифицированные ответы API, сжатые конфигурационные файлы и однострочные SQL‑запросы практически невозможно комфортно отлаживать без нормального форматирования.
В этом гайде разобраны основные форматтеры кода, которые разработчики используют каждый день — когда стоит «распрямлять» (beautify), когда минифицировать и как корректное форматирование улучшает качество кода и эффективность отладки.
Форматирование и валидация JSON
JSON (JavaScript Object Notation) — универсальный формат обмена данными для веб‑API, конфигурационных файлов и хранилищ данных. Форматтер JSON преобразует минифицированный JSON в читаемый с отступами и обратно.
Форматирование минифицированного JSON
Ответы API и продакшен‑конфиги часто минифицируются для уменьшения размера. При отладке важно pretty print JSON, чтобы увидеть структуру данных:
// Минифицировано (сложно читать)
{"users":[{"id":1,"name":"Alice","roles":["admin","user"]},{"id":2,"name":"Bob","roles":["user"]}],"meta":{"total":2,"page":1}}
// Отформатировано (читаемо)
{
"users": [
{
"id": 1,
"name": "Alice",
"roles": ["admin", "user"]
},
{
"id": 2,
"name": "Bob",
"roles": ["user"]
}
],
"meta": {
"total": 2,
"page": 1
}
}Минификация JSON для продакшена
Для API и хранилищ минификация убирает лишние пробелы и сокращает размер полезной нагрузки:
- Удаляет все отступы и переводы строк
- Убирает пробелы после двоеточий и запятых
- Часто уменьшает размер JSON на 10–30%
- Ускоряет передачу и снижает расход трафика
Валидация JSON и проверка синтаксиса
Валидатор JSON помогает находить синтаксические ошибки, которые ломают парсеры:
// Типичные ошибки JSON
// Висячая запятая (некорректный JSON)
{ "name": "Alice", }
// Одинарные кавычки (некорректный JSON)
{ 'name': 'Alice' }
// Неэкранированный ключ (некорректный JSON)
{ name: "Alice" }
// Отсутствует запятая
{ "name": "Alice" "age": 30 }
// Корректный JSON использует двойные кавычки и без висячих запятых
{ "name": "Alice", "age": 30 }Экранирование и разэкранирование JSON‑строк
Когда JSON вкладывается в другой JSON (часто в логах), строки становятся дважды экранированными. Чтобы разэкранировать JSON:
// Дважды экранированная JSON-строка (из логов)
"{\"user\":\"alice\",\"action\":\"login\"}"
// После разэкранирования
{"user":"alice","action":"login"}
// Затем форматируем для читаемости
{
"user": "alice",
"action": "login"
}Инструмент JSON Formatter поддерживает форматирование, минификацию и валидацию с подсветкой синтаксических ошибок.
Форматирование SQL‑запросов
Сложные SQL‑запросы становятся нечитаемыми, если записаны в одну строку или с несогласованным стилем. Форматтер SQL приводит отступы и регистр ключевых слов к единому виду.
Форматирование однострочных запросов
-- До форматирования (трудно читать)
SELECT u.id, u.name, u.email, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.status = 'active' AND u.created_at > '2024-01-01' GROUP BY u.id, u.name, u.email HAVING COUNT(o.id) > 5 ORDER BY order_count DESC LIMIT 100;
-- После форматирования (читаемо)
SELECT
u.id,
u.name,
u.email,
COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id
WHERE u.status = 'active'
AND u.created_at > '2024-01-01'
GROUP BY
u.id,
u.name,
u.email
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC
LIMIT 100;Соглашения по форматированию SQL
- Ключевые слова в верхнем регистре — SELECT, FROM, WHERE, JOIN, ORDER BY
- Выравнивание предложений — каждый основной блок запроса с новой строки
- Списки колонок — по одному столбцу на строку для длинных SELECT‑ов
- Условия JOIN — блок ON с отступом под JOIN
- Вложенные запросы — единообразные отступы для подзапросов и CTE
Форматирование подзапросов и CTE
-- Форматирование CTE (WITH)
WITH active_users AS (
SELECT
id,
name,
email
FROM users
WHERE status = 'active'
),
recent_orders AS (
SELECT
user_id,
COUNT(*) AS order_count
FROM orders
WHERE created_at > CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
)
SELECT
au.name,
au.email,
COALESCE(ro.order_count, 0) AS recent_orders
FROM active_users au
LEFT JOIN recent_orders ro
ON au.id = ro.user_id
ORDER BY recent_orders DESC;Когда использовать форматирование SQL
- Отладка медленных запросов — структура подсвечивает логические ошибки
- Код‑ревью — единый стиль упрощает чтение diff‑ов
- Документация — красиво оформленные запросы в техдоках
- Миграции — сложные скрипты ALTER/CREATE
- Хранимые процедуры — многострочные SQL‑блоки
Инструмент SQL Formatter поддерживает синтаксис MySQL, PostgreSQL, SQL Server и стандартный SQL с настраиваемыми отступами.
Форматирование и prettify XML
XML‑документы из SOAP‑API, конфигурационных файлов и экспортов данных часто приходят минифицированными или с «ломаным» форматированием. Форматтер XML добавляет корректные отступы и переводы строк.
Форматирование минифицированного XML
<!-- Минифицированный XML (нечитаемо) -->
<?xml version="1.0"?><catalog><book id="1"><title>Clean Code</title><author>Robert Martin</author><price>35.99</price></book><book id="2"><title>The Pragmatic Programmer</title><author>David Thomas</author><price>49.99</price></book></catalog>
<!-- Отформатированный XML (читаемо) -->
<?xml version="1.0"?>
<catalog>
<book id="1">
<title>Clean Code</title>
<author>Robert Martin</author>
<price>35.99</price>
</book>
<book id="2">
<title>The Pragmatic Programmer</title>
<author>David Thomas</author>
<price>49.99</price>
</book>
</catalog>Сценарии форматирования XML
- Ответы SOAP‑API — отладка сложных XML‑пейлоадов
- Maven pom.xml — приведение в порядок зависимостей и плагинов
- Android‑разметка — форматирование layout‑файлов XML
- SVG‑файлы — просмотр и правка векторной графики
- .NET‑конфиги — форматирование web.config, app.config
- RSS/Atom‑ленты — отладка структуры фида
Минификация XML для продакшена
Как и JSON, XML можно минифицировать для уменьшения размера при передаче:
- Удаляет отступы и лишние пробелы
- Сохраняет значимые пробелы внутри текстового содержимого
- Не трогает XML‑декларацию и пространства имён
- Уменьшает размер SOAP‑запросов и больших XML‑документов
XML‑пространства имён и сложные документы
<!-- XML с пространствами имён (часто в SOAP) -->
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<auth:Token xmlns:auth="http://example.com/auth">
abc123
</auth:Token>
</soap:Header>
<soap:Body>
<api:GetUser xmlns:api="http://example.com/api">
<api:UserId>42</api:UserId>
</api:GetUser>
</soap:Body>
</soap:Envelope>Инструмент XML Formatter корректно обрабатывает пространства имён, CDATA‑секции и сохраняет структуру документа при форматировании.
Лучшие практики форматирования
Когда форматировать (beautify)
- Отладка — при поиске проблем всегда форматируйте данные
- Код‑ревью — отформатированный код проще просматривать
- Документация — в примерах стоит использовать читабельный формат
- Конфигурация — файлы, редактируемые людьми, должны быть удобны для чтения
- Система контроля версий — единый стиль улучшает diff‑ы и историю изменений
Когда минифицировать
- Пейлоады API — для уменьшения размера трафика
- Продакшен‑конфиги — если файлы не редактируются вручную
- Встраиваемые данные — data‑URL, inline‑скрипты и стили
- Оптимизация хранения — JSON‑колонки в БД и лог‑хранилища
Стандарты отступов
| Формат | Типичный стандарт | Комментарий |
|---|---|---|
| JSON | 2 пробела | Дефолт в JavaScript/Node.js‑проектах |
| SQL | 2–4 пробела | Зависит от команды и стиля проекта |
| XML | 2–4 пробела | Лучше придерживаться общих правил проекта |
Краткий справочник по форматтерам
| Задача | Инструмент | Возможности |
|---|---|---|
| Форматирование/минификация JSON | JSON Formatter | Отступы, минификация, валидация, сортировка ключей |
| Форматирование SQL‑запросов | SQL Formatter | Разные диалекты, регистр ключевых слов, отступы |
| Beautify/минификация XML | XML Formatter | Поддержка пространств имён, CDATA‑секций |
Связанные инструменты
Форматтеры отлично работают в связке с другими утилитами для данных:
- JSON ↔ YAML Converter — конвертация и форматирование между форматами
- XML ↔ JSON Converter — преобразование и форматирование структур данных
- JSONPath Tester — запросы к отформатированному JSON
- XML Validator — проверка структуры XML
- Text Comparer — diff между исходными и отформатированными версиями
Все форматтеры в DevToys Pro
Эти форматтеры входят в коллекцию Formatters в DevToys Pro. Всё форматирование выполняется прямо в вашем браузере — код не отправляется на внешние серверы.