Первый раз минификация JSON действительно имел значение для меня не на веб-сайте - это было на микроконтроллере. я отправлял блок конфигурации на устройство с несколькими килобайтами памяти, чтобы сохранить, и красиво напечатанная версия, которую я редактировал вручную, была почти в два раза больше тех же данных с удаленным пробелом. Те же ключи, те же значения, та же структура - единственная разница была тысячи пробелов и новых строк, которые существовали исключительно для того, чтобы человек мог прочитать это. Разберите их и полезная нагрузка подходит. Это весь трюк за минификацией, и это относится к ответу API, который подается миллион раз в день, как и к файлу конфигурации, сжатому на чип.
Это руководство представляет собой подробную версию того, как и почему минифицировать JSON, построенную на основе бесплатного JSON Минификатор инструмент. я объясню, что минификация удаляет и что она намеренно оставляет в покое, почему меньший JSON быстрее, чем минификация отличается от форматирования и от выхода, и одно тонкое свойство - точность числа - которое отделяет осторожный минификатор от небрежного, Это часть того же семейства, что и Форматтер JSON Я использую противоположную работу, и она принадлежит набору инструментов, который я изложил в Полное руководство по инструментам JSON, йо-
TL;DR: Минификация JSON удаляет все пробелы, вкладки и новые строки, которые находятся между токенами, создавая наименьший текст, который анализирует точно такие же данные. Ничего о ключах, значениях или их порядке не меняется - только пробелы идут.The JSON Минификатор сначала проверяет ваш ввод и сообщает о точной ошибке синтаксического анализатора 's, если он неверен, полоски пробеляют только внешние строковые литералы, поэтому текст внутри ваших значений нетронут, и сохраняет числовые токены байт для байта, поэтому значение, подобное 1.0, остается 1.0. Режим украшения меняет процесс на противоположный с 2 пробелами, 4 пробелами или вкладками. Все работает в вашем браузере.
Что на самом деле делает минификация JSON?
Документ JSON представляет собой последовательность токенов - скобок, скобок, двоеточий, запятых, строк, чисел и литералов true, false, и null. Между этими токенами грамматика JSON допускает любое количество пробелов, и красиво напечатанный JSON использует это разрешение щедро: новая строка после каждой запятой, два или четыре пробела отступов на уровень вложенности, пробел после каждого двоеточия. Все эти пробелы предназначены для человеческих глаз. Анализатор полностью игнорирует это.
Минификация - это акт удаления каждого из этих незначительных пробельных символов, оставляя только сами жетоны и минимальную пунктуацию, необходимую грамматике. конфигурация, которая читается как сорок строк с отступом, сжимается до одной плотной линии. Важно отметить, что данные идентичен - разобрать минифицированную версию и красивую версию и вы получите точно такой же объект, с теми же ключами в том же порядке и тех же значениями Минификация меняет представление, а не значение. грамматика, на которой все это держится, публикуется как RFC 8259, который является авторитетом в том, что считается незначительной пробелом, а что нет.
Белое пространство одного места не ничтожное находится внутри строки. Пространства в "hello world" являются частью значения и должны пережить минификацию нетронутыми. Правильный минификатор поэтому не может просто удалить каждое место в тексте; он должен отслеживать, находится ли он внутри строкового литерала, и оставить это содержимое в покое. The JSON Минификатор делает именно это, проходя по тексту от персонажа к персонажу и теряя только пробелы, находящиеся между жетонами, поэтому преднамеренное пространство внутри одного из ваших значений никогда не теряется.
Зачем вообще минировать JSON?
Заголовок причина размер, и размер переводится прямо в скорость и стоимость в сети. каждый байт ответа JSON должен путешествовать по сети, а для полезной нагрузки запрошенной тысячи или миллионы раз, пробелы складываются в реальную пропускную способность. Вдавливание и разрывы строк обычно составляют от пятой до трети красиво напечатанного документа и #39;s размера, поэтому минитирование может сократить значимый фрагмент каждого перевода. Меньшие ответы приходят быстрее, особенно на медленных мобильных соединениях, и их обслуживание обходится дешевле, когда вы платите за выход. Вот почему практически каждый производственный API возвращает миниатюрный JSON, и каждый инструмент сборки, который связывает данные в веб-приложение, сначала минитирует их.
Преимущество синтаксического анализа тоже есть, хотя оно меньше. синтаксический анализатор, которому не нужно пропускать пробеги пробелов, имеет немного меньше работы, что важно на полях для очень больших документов, обрабатываемых в горячем цикле. И есть угол хранения, который привел меня сюда в первую очередь: когда вы помещаете JSON в ограниченное пространство - файл cookie с ограничением размера, встроенное устройство, столбец базы данных с крышкой, параметр запроса URL-адреса - минифицированная форма - это то, что делает его подходящим. Значок экономии размера в инструменте показывает вам байты до и после, а также процентное сокращение, поэтому вы можете сразу увидеть, стоит ли данный документ минировать или он уже был обеднен.
Что делает минификация не купить вы является секретность или сжатие в тяжелом смысле. минифицированный JSON по-прежнему является простым текстом и все еще прекрасно читается для всего, что его анализирует; удаление пробелов не шифрование и не gzip. на проводе, JSON обычно gzip-сжатый поверх минификации, и два дополняют друг друга - минификация удаляет избыточность, которую грамматика позволяет, и gzip удаляет избыточность в потоке байтов. Минимируйте по причинам выше, а не потому, что вы думаете, что он что-то скрывает.
Чем минирование отличается от форматирования, экранирования и сжатия?
Эти четыре операции постоянно путаются, и их прямая избавляет вас от необходимости обращаться не к тому инструменту. Они действуют на разные вещи и решают разные проблемы.
Минирование удаляет незначительные пробелы, чтобы уменьшить размер документа, сохраняя при этом его действительный JSON. Форматирование, или beautifying, делает обратное: добавляет отступы и разрывы строк, чтобы сделать документ читаемым, что и нужно, когда вы отлаживаете ответ API или редактируете конфигурацию вручную.The JSON Минификатор делает и то, и другое, потому что это два направления одной оси - минифицировать для машин, украшать для людей. Побег это совершенно другая ось: она делает фрагмент текста безопасным для размещения внутренняя часть строка JSON путем превращения кавычек и управляющих символов в последовательности обратной косой черты, что и является задачей JSON Escape / UNESCAPE инструмент. и сжатие подобно тому, как gzip работает с необработанными байтами ниже уровня JSON, еще больше сокращая передачу после того, как минификация выполнила свою часть работы.
В таблице изложены различия и точки, подходящие для каждого инструмента.
| Операция | Что меняет | Результат все еще JSON? | стрелка |
|---|---|---|---|
| минимизировать | Удаляет пробелы между токенами | Да, те же данные | JSON Минификатор |
| Украсить/форматировать | Добавляет отступ и разрывы строк | Да, те же данные | Форматтер JSON |
| Побег | Кодирует текст для размещения внутри строки JSON | Оно становится строковым значением | JSON Escape / UNESCAPE |
| Минимировать CSS | Удаляет пробелы из таблицы стилей | Это CSS, а не JSON | CSS-минификатор |
| Минифицировать HTML | Удаляет пробелы из разметки | Это HTML, а не JSON | HTML-минификатор |
Одна и та же идея минифи-для доставки распространяется на форматы, поэтому CSS-минификатор а HTML-минификатор сядьте рядом с этим - полная сборка минимизирует данные JSON, таблицу стилей и разметку по тем же причинам, связанным с полосой пропускания.
Минификация JSON когда-нибудь меняет мои данные?
Правильный ответ: минификация должна никогда измените свои данные, и хороший инструмент гарантирует это Но есть тонкость, которая отделяет осторожного минификатора от наивного, и это стоит понять, потому что это может вас укусить.
Многие минификаторы работают, анализируя JSON в объект в памяти, а затем повторно сериализуя его без пробелов. Это удобно в обе стороны, но это означает, что каждое значение проходит через язык и тип номера #39;s по пути, и это может переписать, как цифры написанный даже несмотря на то, что математическое значение не изменилось. значение, которое вы написали как 1.0 возвращается как 1. Ценность, подобная 1e3 возвращается как 1000. Целое число с большим количеством цифр, чем язык & #39;s тип числа может точно удерживать - все, что превышает примерно шестнадцать значащих цифр - может вернуться слегка измененным. Для большинства документов все это не имеет значения, но если ваш JSON содержит строки версий, идентификаторы базы данных или десятичные дроби с фиксированной точностью в виде чисел, минификатор повторного разрежения и ограничения может незаметно их повредить.
выше JSON Минификатор избегает ловушки, минируя по-другому. Это все равно проверяет ваш ввод путем его анализа, поэтому неправильно сформированный JSON ловится и сообщается. Но для получения вывода он удаляет пробелы непосредственно из исходного текста, а не повторно сериализует проанализированный объект, что означает, что каждый числовой токен сохраняется именно так, как вы его написали. Задний ноль 1.0 остается 1.0; тридцатизначное целое число сохраняет все тридцать цифр. Вы получаете уменьшение размера минификации без какого-либо риска переписывания ваших чисел - лучшее из проверки и точности байт за байт. Направление украшения, касающееся читаемости, а не транспорта, нормализует форматирование посредством стандартной повторной сериализации, что является ожидаемым поведением при переформатировании для чтения человеком.
Как мне прочитать ошибки, если мой JSON не будет минифицировать?
Инструмент проверяет до его минификации, что означает, что искаженный документ вызывает ошибку, а не сломанный вывод - и эта ошибка является функцией, а не препятствием. Он говорит вам, что у JSON есть реальная проблема перед вы отправляете его куда-нибудь, где он отклонялся бы менее полезно.
Сообщения приходят прямо из JavaScript JSON парсера и обычно называют позицию. наиболее распространенными причинами являются конечная запятая после последнего элемента массива или объекта, что строгий JSON запрещает; ключ, который не обернут двойными кавычками, так как JSON требует цитируемые ключи в отличие от JavaScript литералов объектов; строка, использующая одиночные кавычки вместо двойных; и несбалансированная скобка или скобка, где что-то было открыто и не закрыто. Каждый из них является небольшим исправлением, как только вы знаете, где искать, и сообщаемая позиция указывает на вас в районе. Если ваш источник на самом деле JSONC - JSON с комментариями и конечными запятыми, как используется в некоторых файлах конфигурации - он не будет минифицировать как есть, потому что это расширения, а не стандартный JSON; сначала удалите комментарии и конечные запятые, или преобразуйте в строгий JSON, и он подтвердит.
Когда структура действительна, но вы не видите почему два документа ведут себя по-разному, украшают оба и сравнивают их или пропускают JSON диф инструмент, чтобы точно увидеть, какие ключи или значения отличаются. отладка JSON намного проще в его красивой форме, что является повседневным случаем, который я сделал в Руководство по формату JSON. И поскольку вся эта проверка и минификация происходит в вашем браузере без загрузки, вы можете безопасно вставлять полезные нагрузки, содержащие ключи API, токены или записи клиентов - аргумент конфиденциальности, который я полностью изложил в руководство по конфиденциальности данных для онлайн-инструментов, йо-
Рабочий пример: от читаемой конфигурации до отправленной полезной нагрузки
Вот путешествие туда и обратно, которое показывает инструмент, зарабатывающий свое место. скажем, вы редактировали конфигурацию службы вручную, поэтому она довольно-таки напечатана для читаемости - объектные клавиши на их собственных строках, двухпространственный отступ, пустая структура, которую легко сканировать. прежде чем она перейдет в переменную среды с ограничением длины, вы хотите, чтобы она была как можно меньше.
Вставьте конфигурацию в JSON Минификатор, нажмите Minify, и он сворачивается до одной строки. значок размера может читать что-то вроде 512 байт до 340, сокращение на треть, что является разницей между подгонкой переменной's предел и нет. Скопируйте минифицированную строку прямо в файл среды. обратите внимание, что тайм-аут, который вы написали как 1.5 все еще 1.5 и повторный подсчет 3 все еще 3 - числа нетронуты, и если бы у вас был длинный числовой идентификатор, он бы тоже сохранился в целости и сохранности, потому что инструмент удалил пробелы, а не перепарафировал значения.
Несколько недель спустя отчет об ошибке заставляет вас смотреть на ту же миниатюрную каплю в журнале, и ее невозможно прочитать как одну плотную строку. Вставьте ее обратно в инструмент, нажмите "Украсить", выберите два пробела, и она расширяется до формы с отступом, которую вы действительно можете сканировать. Исправьте значение, снова минимизируйте, отправьте еще раз. Этот двусторонний поток - украсьте для чтения и редактирования, сократите для хранения и отправки - является ежедневным ритмом, и наличие обоих в одном месте с считыванием размера и точным сообщением об ошибках - вот что делает его быстрым. Для более широкого набора утилит сборки и доставки, среди которых он находится, это входит в число Набор инструментов для веб-разработчиков сводит остальные.
Часто задаваемые вопросы
Как минифицировать JSON онлайн? Вставьте свой JSON в область ввода и нажмите Minify. инструмент удаляет все пробелы вне строковых значений и показывает сжатый результат вместе с экономией размера. все работает в вашем браузере, поэтому ничего не загружается.
Изменяет ли минификация JSON данные? Нет. минификация только удаляет пробелы между токенами, поэтому ключи, значения и их порядок остаются идентичными. минифицированный документ анализируется на точно такой же объект или массив, как и исходный красиво напечатанный.
Зачем вообще минифицировать JSON? Минифицированный JSON меньше, поэтому он быстрее передается по сети, использует меньшую пропускную способность и анализирует немного быстрее. Ответы API, файлы конфигурации и данные, включенные в веб-приложения, обычно минифицируются в производстве по этим причинам.
Сохраняет ли этот инструмент форматирование чисел, например 1.0 или большие целые числа? Да. поскольку он удаляет пробелы, а не перепарафинирует значения, числовые токены сохраняются точно так же, как вы их написали. Значение, подобное 1.0, остается равным 1.0, а очень большое целое число сохраняет все свои цифры, которые минификатор анализа и ограничения переписал бы.
В чем разница между минированием и украшением JSON? Минирование удаляет пробелы, чтобы сделать JSON как можно меньшим для машин, а украшение добавляет отступы и разрывы строк, чтобы сделать его читаемым для людей. Этот инструмент делает и то, и другое: минифицирует для доставки, украшает для редактирования и отладки.
Может ли он минифицировать JSON комментариями или конечными запятыми? № Standard JSON не допускает комментариев или конечных запятых, поэтому инструмент сообщает о них как об ошибках во время проверки. сначала удалите комментарии и конечные запятые или преобразуйте свой JSONC в строгий JSON, а затем минифицируйте.
Безопасно ли здесь минифицировать чувствительный JSON? Да. вся обработка происходит в JavaScript внутри вашего браузера, поэтому ни на один сервер не отправляется JSON, ничего не регистрируется, и инструмент работает с отключенным соединением. можно безопасно минифицировать полезные нагрузки, содержащие ключи API или персональные данные.
Почему мой JSON показывает ошибку вместо минификации? Инструмент проверяет ваш ввод перед минификацией, поэтому ошибка означает, что JSON неправильно сформирован, обычно отсутствует или дополнительная запятая, ключ без кавычек, строка с одним кавычком или несбалансированный кронштейн. Сообщение включает в себя положение проблемы, чтобы вы могли ее исправить.
Это руководство сопровождает бесплатное JSON Минификатор инструмент на Toolz.dev - без регистрации, без загрузки, работает в автономном режиме.



