JSON Minify

Уберите пробелы из JSON и увидите, сколько байт удалось сэкономить

JSON

Сжатый

JSON Minify

Уберите пробелы из JSON и увидите, сколько байт удалось сэкономить

Возможности

  • Минификация одним вызовом JSON.parse + JSON.stringify — проходит через настоящий парсер, поэтому синтаксически неверный ввод быстро падает с точным сообщением движка JavaScript
  • Точная по байтам статистика размера: TextEncoder.encode().length измеряет UTF-8-байты (не количество символов), так что многобайтные символы и эмодзи взвешиваются корректно
  • Строка экономии показывает абсолютную разницу в байтах и процент от размера входа — соответствует тому, как будет выглядеть minify-затем-gzip-нагрузка по проводу
  • Кнопка «Копировать» на 1,5 с переключается на «Скопировано!» после клика, чётко подтверждая успешную запись в буфер обмена — без молчаливых сбоев
  • Кнопка «Скачать» выдаёт Blob `minified.json` с MIME application/json, готовый поместить в тело HTTP-запроса или закоммитить в папку фикстур
  • Ошибки разбора всплывают с полным сообщением JS-движка (строка/колонка, если парсер их предоставляет), чтобы точно указать сбойный символ, а не угадывать
  • Полностью на стороне клиента: ввод не покидает браузер, без телеметрии, без загрузки. Вызов minify — синхронный и мгновенный для типичных конфигов (JSON менее мегабайта)
  • Выход сохраняет порядок ключей и точное численное представление — JSON.stringify не перекодирует целые числа в float и не меняет Unicode-эскейпы, так что минифицированный выход байт-эквивалентен тому, что строгий потребитель повторно разберёт

Как использовать

  1. Вставьте JSON в левую панель ввода.
  2. Нажмите «Сжать». Инструмент запускает JSON.parse для проверки, затем JSON.stringify без аргумента отступа, удаляя все незначащие пробелы.
  3. Прочтите строку статистики: байты входа, байты выхода и сэкономленные байты/процент — полезно для решения, стоит ли минификация компромисса с читаемостью.
  4. Нажмите «Копировать», чтобы положить минифицированную строку в буфер обмена, или «Скачать», чтобы сохранить как `minified.json`.
  5. Если ввод был неверен, красная строка ошибки покажет сообщение разбора JS-движка — исправьте JSON и снова нажмите «Сжать».

Советы и лучшие практики

  • Если минифицируете в основном ради бюджета бандла, включите ещё gzip в CI-пайплайне статических ассетов — gzip'ованный pretty JSON часто меньше несжатого минифицированного.
  • Храните оригинальный pretty-print JSON в системе контроля версий; минифицируйте в шаге сборки, а не коммитьте минифицированную версию.
  • Для очень большого JSON (10 МБ+) проход TextEncoder всё ещё быстрый, но пара JSON.parse + JSON.stringify кратко расходует память — нормально в вкладке браузера, проблематично в горячем пути service worker.
  • Если JSON содержит числа рядом с безопасным целочисленным пределом JS (2^53), помните: JSON.parse преобразует их в double — minify это не меняет, но полезно знать перед отладкой расхождения точности.
  • Используйте «Скачать», чтобы положить минифицированный файл в каталог фикстур; позже совмещайте с JSON Diff, если нужно подтвердить, что круговой ход сохранил всё.

Вопросы и ответы

Насколько уменьшится мой JSON?

Полностью зависит от того, сколько пробелов было изначально. Хорошо отформатированный конфиг (отступы 2 пробела, выравнивание ключей, концевые переводы строк) часто сжимается на 30–50 %. JSON, уже в одной строке, сжимается на 0 %. Строка статистики сообщает точное число — попробуйте на своих данных перед фиксацией минифицированной версии.

Стоит ли минифицировать JSON в продакшене?

Обычно нет, потому что сжатие gzip/brotli уже сводит повторяющиеся пробелы к нескольким байтам. Минификация помогает, когда (1) нельзя включить сжатие на транспорте (некоторые встраиваемые цели), (2) вы встраиваете JSON в JS-бандл, где каждый байт идёт в бюджет бандла, или (3) оптимизируете IndexedDB/localStorage, где транспортного сжатия нет.

Меняет ли это мои данные?

Нет. JSON.parse + JSON.stringify — поездка через спецификацию JSON JavaScript, строгое подмножество ECMAScript. Числа, строки, булевы, null, массивы и объекты выходят байт-эквивалентно валидному повторному разбору. Единственная разница — пробелы и порядок ключей (JSON.stringify сохраняет исходный порядок вставки литерала объекта).

Как считаются байты?

Через TextEncoder().encode().length, что даёт длину в UTF-8-байтах. Обычный ASCII — один байт на символ; é — два байта; большинство CJK-символов — три; большинство эмодзи — четыре. Подсчёт длины JavaScript-строки (кодовых единиц) переоценил бы ASCII и недоучёл бы символы дополнительной плоскости; TextEncoder даёт число, соответствующее тому, что идёт по проводу.

Почему Minify падает на моём вводе?

JSON.parse строг: без хвостовых запятых, без комментариев, без одинарных кавычек вокруг строк, без неквотированных ключей. Если вы работаете с расслабленным JSON (JSON5, JSONC), парсер выбросит — предварительно обработайте расслабленным парсером или используйте режим JSONC в JSON Formatter. Строка ошибки показывает сообщение движка, часто включая сломавшую строку/колонку.

Отправляется ли что-нибудь на сервер?

Нет. Обе панели остаются в вашем браузере; минификация выполняется синхронно в том же JavaScript-контексте, что отрендерил страницу. Вкладка «Сеть» DevTools не показывает запросов при нажатии «Сжать». Страница работает офлайн после первой загрузки.

Будет ли минифицированный JSON по-прежнему дружить с diff?

Хуже. Pretty-print JSON-файл диффится построчно, и ревьюеры видят, какой именно ключ изменился. Минифицированный JSON-файл — одна гигантская строка; правка одного символа выглядит как замена всей строки в `git diff`. Держите исходники pretty-print; минифицируйте только для транспорта или хранения.

Чем это отличается от JSON Formatter?

У JSON Formatter есть кнопка Minify рядом с Pretty-Print плюс дерево, JSONPath, JSONC, валидация схемы и diff. Этот инструмент — одна задача, лёгкий: вставить, сжать, скопировать, скачать — без панелей, без режимов, только сэкономленные байты.