Инструмент форматирования JSON
Что такое форматирование JSON?
JSON Formatter делает компактный или неаккуратный JSON читаемым, добавляя отступы, переносы строк и видимую структуру. JSON используется в ответах API, конфигурациях, логах, feature flags, тестовых данных и no-code-интеграциях, где пропущенная запятая, неправильные кавычки или неожиданная вложенность сразу вызывают ошибку парсинга. Инструмент помогает быстро увидеть объекты, массивы, ключи, значения и вероятные места ошибки, а при необходимости снова сжать JSON. Форматирование не меняет смысл данных и не проверяет бизнес-схему автоматически. Для production API отдельно важны типы полей, обязательность, null-значения и версионные контракты. Для production-данных или кодовой базы результат все равно нужно проверить parser, тестами или правилами проекта.
Как использовать
Как использовать
- Вставьте или введите JSON-данные в левое поле ввода
- Выберите размер отступа (2 пробела, 4 пробела или табуляция)
- Нажмите «Format» для форматирования или «Minify» для удаления пробелов
- Результаты появятся автоматически справа с подсветкой синтаксиса
- Нажмите «Copy» или «Download» для сохранения результата
Заметки о валидации JSON
- Форматирование доказывает, что текст является валидным JSON, но не доказывает, что данные соответствуют вашей бизнес-схеме.
- При появлении ошибок проверьте указанную строку и столбец на наличие одинарных кавычек, запятых в конце строки, комментариев или неэкранированных управляющих символов.
Применение
Технический принцип
JSON (JavaScript Object Notation) определён в RFC 8259 / ECMA-404. Грамматика является строгим подмножеством литералов объектов JavaScript: строки должны быть в двойных кавычках, ключи должны быть в кавычках, trailing-запятые запрещены, комментарии не допускаются. Форматтер разбирает документ с помощью `JSON.parse()` в граф объектов хост-языка, затем сериализует обратно через `JSON.stringify(value, replacer, indent)`, где indent — число (1-10 пробелов) или строка (`'\t'`). Парсинг выполняется за O(n) и обычно быстрее этапа stringify, поскольку построение вывода выделяет новые строки. Обработка чисел следует стандарту IEEE 754 двойной точности: целые числа больше `Number.MAX_SAFE_INTEGER` (2^53 - 1 = 9007199254740991) теряют точность, поэтому `9007199254740993` при round-trip превращается в `9007199254740992`. Десятичные повторы вроде `0.1 + 0.2` дают `0.30000000000000004` после парсинга. Юникодные строки допускают экранирование `\uXXXX`, включая суррогатные пары (`\uD83D\uDE00` → 😀); парсер отвергает одинокие непарные суррогаты. Пробельные символы значимы только внутри строк — любая комбинация пробела, табуляции, LF, CR между токенами парсится идентично. Распространённые нестандартные послабления — это JSON5 (комментарии, trailing-запятые, ключи без кавычек) и JSONC (конфигурация VS Code). Стандартный JSON их не допускает, и `JSON.parse` выбрасывает `SyntaxError` при их встрече. Потоковые альтернативы, такие как NDJSON (один объект на строку) и JSON Lines, избегают загрузки всего документа в память. Для глубоко вложенного ввода предел стека V8 (~10 000 кадров) ограничивает рекурсивные парсеры; промышленные парсеры используют итеративные конечные автоматы для снятия этого ограничения.
- Грамматика RFC 8259 / ECMA-404 — шесть типов значений (объект, массив, строка, число, true/false, null); строки в двойных кавычках; ключи должны быть в кавычках; нет trailing-запятых; нет комментариев.
- `JSON.parse(text)` выполняется за O(n) и выбрасывает `SyntaxError` с указанием смещения символа при невалидном вводе; `JSON.stringify(value, replacer, indent)` генерирует форматированный вывод с отступом в 2-10 пробелов или `'\t'`.
- Точность чисел IEEE 754: `Number.MAX_SAFE_INTEGER = 2^53 - 1`; целые числа за этим пределом округляются до ближайшего представимого double, поэтому ID чатов и Twitter Snowflake ID должны передаваться как строки.
- Экранирование Unicode `\uXXXX` поддерживает всю BMP; символы за пределами BMP требуют кодирования суррогатной парой `\uD83D\uDE00`; парсер отвергает одинокие непарные суррогаты по RFC 8259 §8.2.
- Распространённые ошибки парсинга: строки в одинарных кавычках (`'foo'`), trailing-запятая после последнего элемента массива/объекта, неэкранированные управляющие символы внутри строк, неэкранированный обратный слеш, отсутствие закрывающей `}`/`]`, BOM (`\uFEFF`) в начале.
- Циклические ссылки выбрасывают `TypeError: cyclic object value` в `JSON.stringify`; используйте колбэк `replacer` с WeakSet для разрыва циклов, или библиотеки вроде `flatted` / `json-stringify-safe`.
- Нестандартные варианты: JSON5 (`.json5`, допускает комментарии и trailing-запятые), JSONC (конфигурация VS Code), NDJSON / JSON Lines (один объект на строку, удобно для потоковой обработки) — все отвергаются строгим `JSON.parse`.
Примеры
Пример объекта
Вход:
{
"name": "ToolAct",
"type": "web tool",
"active": true
}
Выход: красивое форматирование с отступом 2 пробела и стабильным порядком ключейПример массива
Вход: [1,2,3,"a","b","c"]
Выход: отформатировано с отступом 2 пробела; числа остаются числовыми, строки сохраняют кавычкиВложенная структура
Вход:
{"user":{"name":"Alex","skills":["JavaScript","Python"]}}
Выход:
{
"user": {
"name": "Alex",
"skills": [
"JavaScript",
"Python"
]
}
}
Примечание: вложенные объекты и массивы получают отступ рекурсивно; ширина отступа выбирается на панели инструментовЧасто задаваемые вопросы
Что делает форматтер?
Переформатирует JSON: красивая печать с выбранным отступом (2 или 4 пробела) или минификация в одну строку. Проверяет валидность при разборе, поэтому синтаксические ошибки сообщаются с указанием строки и столбца.
Почему мой JSON отвергается как невалидный?
Типичные причины: висячие запятые (допустимы в JS, запрещены в JSON), строки в одинарных кавычках (нужны двойные), ключи без кавычек, комментарии (// или /* */) или пропущенные скобки. Страница показывает место сбоя разбора. JSON5 и JSONC (JSON с комментариями) — это надмножества JSON; для них используйте другой парсер.
Сохраняется ли порядок ключей?
Спецификация JSON говорит, что порядок ключей не значим, но большинство парсеров сохраняют его при обходе туда-обратно. Этот инструмент сохраняет порядок вставки, что обычно удобнее для читаемых diff-ов.
Справится ли он с очень большими JSON-файлами?
Современные браузеры справляются с JSON-файлами в 10–50 МБ, но редактор может тормозить. Для файлов в сотни мегабайт используйте потоковый парсер (jq в командной строке, инструменты ndjson); браузерные парсеры загружают всё дерево в память.
Загружается ли мой JSON?
Нет. Разбор и форматирование выполняются в вашем браузере через JSON.parse и JSON.stringify. Вставленный JSON никуда не передаётся.
Почему большие числа теряют точность?
JavaScript JSON.parse использует Number — двойную точность IEEE 754. Целые числа выше 2^53 теряют точность (например, 9007199254740993 молча округляется). Для BigInt или разбора с сохранением строк используйте кастомный парсер или заранее помечайте большие числа строками на стороне отправителя.
А как насчёт JSONC (JSON с комментариями)?
Строгий JSON запрещает комментарии. Некоторые IDE (конфиги VS Code) используют JSONC, который добавляет комментарии // и /* */. Форматтер обычно поддерживает режим «JSONC», сохраняющий комментарии; в строгом режиме комментарий — это синтаксическая ошибка.