Как минифицировать JSON без удаления пробелов внутри строк
Удалить только внешние пробелы, сохранить пробелы внутри строк
Минификация убирает лишние пробелы и переносы между элементами JSON. Она удобна, когда нужна компактная однострочная копия: для передачи в поле другой системы, подготовки тестового тела запроса или хранения небольшого примера. Пробелы внутри строк остаются данными и должны сохраниться.
Минификатор JSON Neraviko сначала проверяет синтаксис, затем удаляет незначащие пробельные символы за пределами строк. Он не пересобирает значения через декодирование и сериализацию. Для работы используем синтетический документ: названия и суммы ниже придуманы для проверки поведения.
Проверяем компактный результат
Исходный текст, без переноса после последней скобки:
{
"label": "Demo Box",
"amount": 1e3,
"letter": "\u0041",
"tags": ["a", "b"]
}
После минификации:
{"label":"Demo Box","amount":1e3,"letter":"\u0041","tags":["a","b"]}
Эта пара воспроизведена текущим исходным форматтером Neraviko. Строка Demo Box по-прежнему содержит два пробела. Число сохраняет написание 1e3, а буква — исходную запись Unicode escape \u0041. Инструмент удалил только оформление вокруг ключей, значений и скобок.
Для ровно показанного входа с переносами LF размер в UTF-8 составляет 87 байт, результат — 69 байт. Уменьшение — 18 байт, примерно 20,7%. Это измерение одного учебного документа, а не оценка среднего выигрыша. Если добавить перенос в конце исходника или использовать CRLF, числа изменятся. Если документ уже записан в одну строку без лишних пробелов, эффект может быть нулевым.
График такого примера полезен только с этими условиями: «87 → 69 байт, синтетические данные, LF, без завершающего переноса». Он ничего не говорит о скорости сайта, стоимости трафика или результатах чужого API.
Как выполнить минификацию
- Сохраните исходный документ отдельным файлом, особенно если это ответ интеграции, который потребуется для диагностики.
- Откройте JSON minifier и вставьте обезличенный текст без Markdown-оформления.
- Запустите операцию. У минификатора v1 нет дополнительных настроек: он не сортирует ключи и не округляет числа.
- Убедитесь, что операция завершилась успешно, и сопоставьте несколько важных значений с оригиналом.
- Скопируйте либо скачайте компактный результат. Для повторного чтения откройте форматирование JSON.
Обработка выполняется на сервере: браузер отправляет содержимое поля HTTP-запросом. Для теста не нужны ключи доступа, настоящие адреса людей или данные клиентов. Подготовьте пример без секретов; для чувствительного документа используйте локальный инструмент в своей доверенной среде.
Почему нельзя просто удалить все пробелы
Замена всех пробелов во всём тексте превратит "Demo Box" в "DemoBox". Это уже другое значение. Удаление реальных переводов строки и экранированной последовательности \n тоже нельзя смешивать: первое может относиться к оформлению, второе — к содержимому строки.
В JSON незначащие пробельные символы ограничены пробелом, табуляцией, LF и CR за пределами строк. Их допустимые позиции определяет грамматика документа. RFC 8259, раздел 2.
Не используйте регулярную замену для документа, смысл которого нельзя потерять. Даже если простой пример работает, строки с экранированными кавычками могут нарушить наивное определение границ. Инструмент, понимающий строки и escape-последовательности, позволяет сохранить эти границы.
Что происходит с ошибками
Ввод {"ready":true,} не станет правильным после удаления пробелов: в нём есть лишняя запятая. Текущий парсер возвращает INVALID_JSON с позицией 14, считая байты от нуля. Исправьте синтаксис или отдельно запустите проверку JSON, затем повторите минификацию.
Также проверьте, что вставили один документ. Две записи вроде {"a":1}{"b":2} нельзя превратить в один JSON простой минификацией. Если источник отдаёт несколько сообщений, требуется согласованный формат потока или контейнер, который понимает получатель.
Операция имеет лимит 262 144 байта запроса и общее ограничение payload. В API вход передаётся как исходный текст в строковом поле input; дополнительные options не поддерживаются и вызывают UNKNOWN_OPTION. Большой документ лучше обрабатывать локально или разбивать только по правилам его формата, а не разрезать посередине массива.
Компактность не равна проверке контракта
Минификатор сохраняет порядок ключей, строковые escapes и повторяющиеся ключи. Он не разрешает конфликт вида {"amount":1,"amount":2}. Не используйте полученный текст как доказательство корректного набора свойств: для этого нужен контракт, а при подходящей схеме — JSON Schema validator.
Результат также не является каноническим представлением для криптографической подписи. Минификация меняет байты документа и не вводит единый порядок свойств или нормализацию всех значений. Если протокол вычисляет подпись по исходному сообщению, отправляйте именно то представление, которое он требует.
Минификация не заменяет транспортное сжатие. Она уменьшает текстовое оформление; то, применяет ли сервер сжатие при передаче, проверяется отдельно. Оценивать практическую пользу стоит по своему документу и требованиям получателя. Читаемый исходник удобен для сопровождения, а компактная копия — для конкретной передачи.

Модельный пример минификации: 87 и 69 байт UTF-8; LF, без конечного переноса; значения сохранены.
На графике показан только синтетический пример выше: 87 → 69 байт, разница 18 байт. Размер HTTP-запроса, JSON-конверт API и транспортное сжатие сюда не входят.