JSON formatter и валидатор

Acrafto Team Разработчики
Обновлено
Ожидание ввода. Вставьте JSON выше или перетащите файл .json.

Вставьте любой JSON в поле выше, и этот JSON formatter и валидатор проверит его прямо во время ввода. Корректные данные форматируются с выбранным отступом или минифицируются в одну строку. Если в данных есть ошибка, вы получите точное сообщение с номером строки и столбца, подсвеченный фрагмент и, для типичных ошибок, исправление в один клик. Всё работает в вашем браузере, поэтому ответы API, конфигурационные файлы и выгрузки не покидают ваш компьютер.

Что умеет этот JSON formatter

  • Форматирование JSON с отступом в 2 пробела, 4 пробела или табуляцией. Исходный порядок ключей сохраняется, если не отметить Сортировать ключи.
  • Минификация JSON удаляет все пробелы и переносы строк. Показатель размера под результатом показывает, сколько байт вы сэкономили.
  • Проверка JSON в реальном времени по RFC 8259, действующему стандарту JSON. Строка состояния становится зелёной, как только документ корректен.
  • Автоматическое исправление типичных ошибок: лишние запятые, одинарные кавычки, ключи без кавычек, комментарии, True, None и NaN в стиле Python, числа вида .5 или +1.
  • Загрузка файлов кнопкой Открыть файл или перетаскиванием файла .json в поле ввода. Результат можно скачать или вернуть в поле ввода для следующего прохода.

Проверка JSON: сообщение об ошибке важнее красного цвета

Большинство онлайн-валидаторов сообщает только о том, что что-то не так. Браузеры ненамного лучше: JSON.parse в Chrome выдаёт Unexpected token } in JSON at position 148, Firefox пишет expected property name or '}', и ни один из них не говорит, на какую строку смотреть. У этого инструмента собственный парсер, который запоминает, где начинается каждый токен. Когда он останавливается, вы видите строку и столбец, фрагмент этой строки с указателем ^ под проблемным символом и понятную подсказку, например Вероятно, пропущена запятая между двумя свойствами. Кнопка Перейти к ошибке переносит курсор прямо в это место поля ввода.

Самые частые ошибки, которые мы видим во вставленных документах:

ВводПроблемаПравильный JSON
{'name': 'Ada'}одинарные кавычки{"name": "Ada"}
{name: "Ada"}ключ без кавычек{"name": "Ada"}
[1, 2, 3,]лишняя запятая в конце[1, 2, 3]
{"a": 1 "b": 2}пропущена запятая{"a": 1, "b": 2}
{"ok": True}литерал Python{"ok": true}
{"x": 007}ведущий ноль{"x": 7} или {"x": "007"}
// commentкомментарийв JSON не допускается

Кнопка Исправить за меня устраняет все эти ошибки, кроме пропущенной запятой и ведущего нуля. Исправление намеренно осторожное: оно никогда не угадывает, где должна стоять пропущенная запятая, потому что запятая не на своём месте меняет смысл данных, а 007 может означать как число 7, так и код. В таких случаях вы получаете точную позицию ошибки.

Большие числа, порядок ключей и другие вещи, которые обычно ломаются

Многие форматтеры работают так: вызывают JSON.parse, а затем JSON.stringify. Такой круговой путь незаметно портит данные. ID из Twitter или Snowflake вроде 1234567890123456789 превышает предел 2^53 для чисел JavaScript и возвращается как 1234567890123456800. Значение 1.0 превращается в 1, а 1e3 в 1000. Этот форматтер никогда не преобразует числа в формат с плавающей точкой. Он копирует каждый литерал точно в том виде, в каком тот был записан, поэтому результат остаётся точным переформатированием исходных данных, а не их новой интерпретацией. То же касается escape-последовательностей в строках: "\u00e9" остаётся "\u00e9" и не превращается в "é".

Порядок ключей тоже сохраняется. Спецификация JSON считает члены объекта неупорядоченными, но конфигурационные файлы, тестовые фикстуры и код-ревью читать гораздо удобнее, когда порядок стабилен. Если вам нужна каноническая форма, например чтобы сравнить два ответа API в diff-инструменте, включите Сортировать ключи, и оба документа перечислят свои свойства по алфавиту на каждом уровне вложенности.

Форматирование JSON или минификация: что когда использовать

Отформатированный JSON предназначен для людей. Используйте его, когда просматриваете ответ API, пишете package.json, tsconfig.json или документ OpenAPI, или храните фикстуры в репозитории, где diff должен показывать одно изменение на строку. Два пробела приняты в мире JavaScript, четыре пробела распространены в проектах на Python и .NET, а табуляция позволяет каждому читателю выбрать ширину отступа самостоятельно.

Минифицированный JSON предназначен для машин. Пробельные символы обычно занимают от 20 до 40 процентов отформатированного документа, поэтому их удаление уменьшает данные, которые отправляются в браузер, значения в Redis или в столбце базы данных и атрибуты data-*, встроенные в HTML. Gzip частично сокращает этот разрыв, но минифицированная версия всё равно сжимается до меньшего размера. Показатель размера под результатом показывает точную разницу для вашего документа.

Работа с JSON в терминале и в редакторах

Для файлов, которые вы обрабатываете регулярно, инструмент командной строки быстрее любого сайта. jq . file.json форматирует, jq -c . file.json минифицирует, а python -m json.tool file.json работает везде, где установлен Python. Visual Studio Code форматирует JSON сочетанием Shift+Alt+F и проверяет его по схеме, если добавить свойство $schema. Эта страница нужна для остальных случаев: ответ, скопированный со вкладки «Сеть» в инструментах разработчика, строка из лога, фрагмент конфигурации из вики или быстрая проверка на компьютере, где нельзя ничего установить.

Связанные инструменты на сайте: кодировщик и декодировщик Base64 декодирует часть с данными (payload) токена JWT, которая представляет собой JSON, закодированный в Base64url. Конвертер Unix timestamp превращает числа createdAt из большинства ответов API в читаемые даты, а UUID декодер покажет версию и временную метку идентификаторов в ваших данных. Другие утилиты собраны в разделе инструменты для разработчиков.

Часто задаваемые вопросы

Загружается ли мой JSON на сервер? Нет. Разбор, форматирование и исправление полностью выполняются в вашем браузере на JavaScript. После загрузки страницы можно отключить интернет, и инструмент продолжит работать. Ничего не записывается в журналы и не сохраняется.
Почему валидатор отклоняет комментарии, если мой редактор их принимает? Комментарии намеренно убрал из JSON его автор, Douglas Crockford, чтобы формат не использовали для директив парсеру. Файлы вроде tsconfig.json или .vscode/settings.json формально являются JSONC, расширенной версией формата, которую поддерживают редакторы. Строгие парсеры в API, базах данных и большинстве языков программирования такие файлы отклоняют. Кнопка исправления удаляет комментарии, поэтому результат будет валидным везде.
Можно ли отформатировать JSON Lines или несколько объектов сразу? Документ JSON содержит ровно одно значение. Если вставить несколько объектов, разделённых запятыми или переносами строк, валидатор остановится на первом лишнем значении. Заключите их в квадратные скобки, чтобы получился массив, и затем отформатируйте. Кнопка исправления не делает этого автоматически, потому что не может знать, задумывались ли входные данные как один документ.
Какой максимальный размер? Фиксированного ограничения нет. Документ в несколько мегабайт ноутбук форматирует за доли секунды. Подсветка синтаксиса отключается примерно после 400 КБ, чтобы страница оставалась отзывчивой, но копирование и скачивание продолжают работать.
Меняет ли сортировка ключей данные? Нет. Объекты в JSON по определению неупорядочены (см. статью о JSON в Википедии), поэтому парсер читает отсортированный и исходный документ как одно и то же значение. Массивы никогда не переупорядочиваются, потому что их порядок является частью данных.
Как экранировать JSON для вставки в строку? Сначала минифицируйте его, затем экранируйте каждую обратную косую черту и двойную кавычку. Во многих языках это делается напрямую: JSON.stringify(JSON.stringify(obj)) в JavaScript или json.dumps(json.dumps(obj)) в Python создают строку JSON, которая содержит текст JSON.

Я был бы признателен, если бы вы поделились этими страницами с друзьями, сохранили их в закладках или ссылались на них. Спасибо! 🙏