Перейти к содержимому

Форматировать JSON

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

  • Не сохраняется
  • Без очереди и ожидания
  • Без регистрации и водяных знаков
Отступ
Отформатировано

Здесь появится отформатированный JSON.

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

1

Вставьте JSON

Или перетащите файл .json. Всё, что вы вставили, остаётся на этой странице — ничего не сохраняется.

2

Выберите отступ

Два пробела, четыре, табуляция или минификация в одну строку. Выбор запоминается на следующий раз.

3

Скопируйте или скачайте

Скопируйте результат или сохраните его файлом. Если JSON сломан, вы получите строку, столбец и символ.

Что переживает разбор и повторную печать

Форматирование — это разбор и повторная печать, и только числа переносятся как текст, который вы набрали. Это шире, чем случай с большими целыми, который считает баннер: любое число, чья кратчайшая запись в JavaScript отличается от вашей, выводится из исходного текста, поэтому 1.10 сохраняет конечный ноль, 1e5 остаётся в экспоненциальной форме, а отрицательный ноль остаётся отрицательным. В предупреждении считаются только небезопасные целые числа, потому что для них альтернатива — тихая порча данных, а не просто аккуратная запись.

Строки как текст не переносятся. Escape-последовательности декодируются при чтении документа и записываются заново при печати, поэтому \u0041 возвращается как A, а экранированная косая черта — без экранирования. Значение то же, а байты — нет, и это важно только в одной ситуации, но там очень важно: если что-то дальше по цепочке сравнивает два JSON-файла побайтно, прогон одного из них через форматтер не проходит бесследно.

Два поведения на уровне объектов стоит знать, прежде чем доверять переформатированию. Дубликаты ключей разрешаются молча, побеждает последний — ровно так же, как это делает собственный парсер браузера: документ с двумя полями "id" форматируется без замечаний и возвращается с одним, и ничто не сообщает, что было второе. А порядок ключей совпадает с порядком в вашем файле только для ключей, которые не являются целыми числами: объект с ключами "1", "2" и "name" вернётся с цифровыми ключами впереди, в порядке возрастания, потому что именно так JavaScript упорядочивает свойства объектов. Обычные ключи сохраняют порядок, в котором вы их написали.

Если нужно другое

Если у вас tsconfig.json, конфиг ESLint или файл настроек VS Code, эта страница укажет на комментарии и висячие запятые, а не отформатирует в обход них, — и для JSON-инструмента это правильный ответ, но для вашего файла это не тот инструмент. Это JSONC, и ваш редактор уже умеет его разбирать; в командной строке json5 и dasel читают такие файлы, не выдавая их за JSON.

Для всего, что сложнее смены отступов, форматтер — инструмент не той формы. jq одним выражением делает то, для чего в поле вставки нет никаких настроек: jq -S . сортирует ключи каждого объекта, чтобы можно было сравнить два ответа, jq 'del(.token)' удаляет поле, прежде чем показывать тело запроса кому-то, а jq -c сворачивает массив объектов в JSON Lines, которого ждёт конвейер. К тому же он читает файл, а не буфер обмена, — и это решает, когда документ больше, чем удобно выделить мышью.

Частые вопросы

Мой JSON где-нибудь сохраняется?

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

Почему здесь большие числа остаются точными, а в других форматтерах нет?

Потому что почти все остальные молча их портят. Число в JavaScript — 64-битное число с плавающей точкой, поэтому точно хранит только целые числа до 9 007 199 254 740 991. Всё, что больше, — ID поста в Twitter/X, snowflake в Discord, номер банковского счёта, 64-битный ключ базы данных — теряет последние цифры, как только проходит через `JSON.parse`. Число при этом выглядит правдоподобно, и именно этим оно опасно: 7205759403792793600 незаметно превращается в 7205759403792793000. Эта страница сохраняет вставленные вами цифры в точности и сообщает, сколько чисел ей пришлось защитить.

Что происходит со сломанным файлом?

Вы узнаёте, где проблема, а не только то, что она есть. Вы получаете номер строки, столбец, саму строку с указателем ^ под проблемным символом и описание простыми словами — «висячая запятая перед }», а не «Unexpected token». Висячие запятые, одинарные кавычки, ключи без кавычек и неэкранированные переносы строк внутри строк — четыре причины большинства поломок JSON, и каждая названа конкретно.

Поддерживаются ли JSON Lines / NDJSON?

Да, и форма сохраняется. JSON Lines — это одно полное значение JSON на строку, формат логов и выгрузок данных, и если растянуть его на много строк, пропадёт то, ради чего он нужен. Формат определяется автоматически, каждая строка форматируется отдельно, а расположение «одно значение на строку» сохраняется.

Можно ли исправить JSON с комментариями или висячими запятыми?

Инструмент точно укажет на них, но молча не примет. Комментарии и висячие запятые — это не JSON, а JSON5 или JSONC, которые на самом деле используются в конфигах вроде tsconfig.json. Форматтер, который молча их принял бы, выдал бы файл, который потом отвергнет ваш парсер, — а это хуже, чем ошибка здесь.

Есть ли ограничение по размеру?

Только доступная память, а не наш лимит. Документы в несколько мегабайт форматируются мгновенно; очень большие ограничены тем, сколько можно удержать в памяти одновременно, а не чем-то с нашей стороны.

Меняет ли минификация мои данные?

Нет. Минификация удаляет только пробелы между токенами — никогда не меняет порядок ключей, не трогает запись чисел и ничего не выбрасывает. Результат разбирается ровно в то же значение, просто он меньше.

Полезно знать: Форматирование точное: документ разбирается и печатается заново, поэтому всё, что разбирается, вернётся обратно. Только строгий JSON: комментарии, висячие запятые и ключи без кавычек отклоняются, а не исправляются молча, потому что исправление означало бы догадки. Очень большие документы при форматировании держатся в памяти дважды.

Разместите этот инструмент на своём сайте

Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.