Главная›Инструменты›Разработка и данные›Кодирование и данные›JSON-форматтер и валидатор с разбором ошибки

JSON-форматтер и валидатор с разбором ошибки

Вставьте JSON — инструмент разложит его с отступами, сожмёт в одну строку и скажет, где сломано. Разбор идёт своим посимвольным проходом, поэтому вместо «Unexpected token» вы видите строку, столбец, сам фрагмент с указателем на символ и объяснение по-русски: висячая запятая, ёлочки из Word, ключ без кавычек, комментарий, NaN из выгрузки.

Отступ
Вставьте JSON в левое поле — проверка пойдёт сама.

Разбор узнал типовые поломки. Кнопка показывает изменения, применяются они отдельной командой.

пройдёт по всем распознанным правилам; кнопка «Вернуть как было» отменяет

Исходный JSON

пусто

Текст никуда не отправляется: разбор идёт в браузере. Потолок — около 2 МБ, на большем объёме вкладка начнёт подвисать. У текста длиннее 400 тысяч символов проверка на каждый символ отключается, работает кнопка «Проверить».

В дереве видно структуру целиком. Кнопка «путь» рядом с узлом кладёт в буфер адрес вида data.items[0].price — им удобно объяснить разработчику, где лежит поле.

Разбор ошибки вместо позиции в символах

JSON-форматтер раскладывает сжатую строку по строкам с отступами, сворачивает обратно и проверяет синтаксис. При ошибке он показывает номер строки и объясняет причину по-русски: пропущена запятая, лишняя запятая перед закрывающей скобкой, одинарные кавычки вместо двойных, незакрытая строка.

Разбор ошибки — главная работа инструмента. Стандартное сообщение браузера сообщает позицию в символах от начала файла, и в ответе на двести килобайт это бесполезно. Здесь позиция переводится в строку и столбец, а рядом печатается сам фрагмент с подсветкой места.

Формат намеренно строгий. В JSON нет комментариев, нельзя оставлять запятую после последнего элемента, ключи всегда в двойных кавычках, а числа пишутся без ведущих нулей. Почти все ошибки в реальных файлах — попытка написать в JSON то, что разрешено в JavaScript.

Носитель структурированных данных
Структурированные данные всегда требовали строгого формата: одна ошибка ломала весь прогон. Фото: Викисклад, общественное достояние.
ОшибкаЧто видноКак чинить
Лишняя запятая{"a": 1,}Убрать перед скобкой
Одинарные кавычки{'a': 1}Заменить на двойные
Ключ без кавычек{a: 1}Взять в кавычки
Комментарий// заметкаУдалить
Незакрытая строка"текстДобавить кавычку

Крокфорд, RFC 8259 и отсутствие комментариев

Формат придумал Дуглас Крокфорд около 2001 года, взяв за основу запись объектов в JavaScript. Задача была прикладной: передавать данные между браузером и сервером без тяжёлого XML. Крокфорд подчёркивал, что ничего не изобретал — просто описал и назвал то, что уже работало.

Первое формальное описание вышло в 2006 году документом RFC 4627, действующая версия — RFC 8259 от 2017 года. Параллельно формат стал международным стандартом ECMA-404, который занимает всего несколько страниц: вся грамматика умещается на одной схеме.

Отсутствие комментариев — сознательное решение автора. Крокфорд объяснял, что убрал их, потому что комментарии начали использовать для директив разбора, и это ломало совместимость. Отсюда пошли расширения вроде JSON5 и практика класть заметки в поле с именем-подчёркиванием. Для потоковой передачи придумали формат построчного JSON, где каждая строка — самостоятельный документ: такой файл читается по кускам и не требует загрузки целиком в память.

Серверная
Формат родился из простой задачи: гонять данные между сервером и браузером быстрее. Фото: NOIRLab/NSF/AURA/T. Slovinský, CC BY 4.0.

С какой ошибки начинать чинить

Вставьте текст и нажмите разбор. Если файл валиден, инструмент разложит его с отступами; если нет, покажет строку с ошибкой. Начинайте чинить с первой ошибки: разбор останавливается на ней, и остальные сообщения часто оказываются её следствием.

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

Для сравнения двух ответов удобнее сравнение JSON: оно покажет путь до каждого отличающегося поля. Привести к порядку SQL-запрос поможет форматирование SQL.

Отдельно полезно смотреть на глубину вложенности. Ответ, где к нужному полю ведут семь уровней, почти всегда говорит о том, что структуру собирали из нескольких источников без приведения к общему виду, и работать с ним будет неудобно.

Проверяйте кодировку файла. JSON по стандарту записывается в UTF-8, и текст в другой кодировке разбирается с ошибкой либо превращает кириллицу в вопросительные знаки. Метка порядка байтов в начале файла тоже мешает: часть разборщиков считает её частью первого ключа и падает на первом же символе, сообщая при этом что-то совсем невнятное про неожиданный токен.

Автор форматаДуглас Крокфорд
Появился около2001
Первый RFC4627, 2006
Действующий RFC8259, 2017
Стандарт ECMA404
Комментариизапрещены
Кавычки у ключейтолько двойные
Запятая после последнегоошибка

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

На каждую узнанную поломку есть кнопка починки, и она сначала показывает список изменений. Рядом дерево объекта с копированием пути к узлу, разворот JSON, завёрнутого в строку из логов, и раскодировка \uXXXX обратно в кириллицу.

  1. Проверка идёт сама, пока текст меньше 400 тысяч символов; на большем работает кнопка «Проверить». Потолок инструмента — около 2 МБ.
  2. В ней строка и столбец, сам фрагмент с указателем на символ и объяснение, что в этом месте запрещено. Ниже идут кнопки для узнанных поломок.
  3. Кнопка починки показывает изменения построчно: слева как есть, справа как станет. Применяются они отдельной командой, а «Вернуть как было» откатывает последний шаг.
  4. Отступ в 2 или 4 пробела либо табы, ключи по алфавиту, кириллица в \uXXXX. Кнопка «Сжать в строку» даёт минифицированную версию, а карточки снизу показывают размер до и после.
  5. Вкладка «Дерево» сворачивает узлы и копирует путь к любому полю в виде data.items[0].price — такой адрес удобно отправить разработчику.

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

Чем разбор ошибки здесь отличается от сообщения браузера?

JSON.parse пишет что-то вроде «Unexpected token } in JSON at position 152» и оставляет искать это место руками. Здесь свой проход по символам: он помнит, что ожидалось в этой точке, и переводит это в строку, столбец, фрагмент с указателем и разбор случая — висячая запятая, одинарная кавычка, ключ без кавычек, комментарий, обрыв строки.

Куда уходит вставленный текст?

Нет. Разбор, форматирование и починка идут в браузере на JavaScript: текст не уходит на сервер и нигде не сохраняется. Страницу можно открыть, отключить сеть и продолжить работать.

Что такое висячая запятая и почему JSON её не принимает?

Это запятая перед закрывающей скобкой: {"a": 1,}. В JavaScript и Python такая запись проходит, спецификация JSON её запрещает: после последней пары и последнего элемента разделитель не ставится. Кнопка «Убрать висячие запятые» вычищает их по всему тексту, включая несколько запятых подряд.

Откуда в JSON берутся ёлочки и одинарные кавычки?

Ёлочки подставляет автозамена: в Word, в почтовых редакторах и в мессенджерах прямая кавычка превращается в « » или в “ ”. Одинарные приходят из кода на JavaScript и Python, когда объект скопировали прямо из редактора. Замена идёт вне строковых значений, поэтому «Ромашка» внутри названия компании остаётся нетронутой.

Что делает кнопка «Развернуть JSON из строки»?

Разбирает частый случай из логов, когда весь объект лежит внутри двойных кавычек с экранированием: {"payload":"{\"id\":7}"}. Кнопка находит такие поля, разбирает вложенный текст и подставляет его обычным объектом. Тот же приём срабатывает, когда в кавычки завёрнут весь документ целиком.

Длинные числа не портятся при форматировании?

Числа переносятся посимвольно, поэтому идентификатор 9223372036854775807 и цена 199.00 остаются как были. Обычный JSON.parse превратил бы такой идентификатор в 9223372036854776000, потому что число не помещается в тип double.

Чего инструмент не делает?

Он не проверяет документ по JSON Schema, не сравнивает две версии между собой и не умеет выгружать результат файлом. JSON5 и JSONL он тоже не поддерживает: комментарии и одинарные кавычки для него поломки, которые надо убрать. Автопочинка работает по типовым правилам и результат стоит просмотреть глазами, особенно там, где строка была оборвана переносом.

Какой объём текста он выдержит?

Потолок — около 2 МБ, дальше разбор отказывается работать, чтобы вкладка не подвисла. От 400 тысяч символов отключается проверка на каждый нажатый символ и остаётся кнопка «Проверить». Выгрузку на десятки мегабайт лучше открывать в редакторе на компьютере.

Спросите нейросети об инструменте

Отвечает DeepSeek по данным этой страницы и тому, что у вас сейчас на экране: что делает, как устроен, ограничения

Больше возможностей: Нейросеть для кода, написать, найти ошибку, объяснить.

Похожие инструменты

Сравнить два JSON

Показывает, чем отличаются два ответа API: какие поля появились, пропали и изменились, с путём вида data.items[0].price. Служебные поля можно исключить.

Открыть
Форматирование SQL

Раскладывает запрос по строкам с отступами, приводит ключевые слова к верхнему или нижнему регистру, не трогает строки и комментарии, умеет сжимать в одну строку.

Открыть
JWT-декодер

Разбор токена JWT: заголовок, полезная нагрузка с расшифровкой стандартных полей, сроки выдачи и истечения в датах, проверка структуры. Без отправки на сервер.

Открыть
Генератор UUID

Версии 4 и 7 пачками, пять форматов записи и разбор готового идентификатора с датой создания для v7.

Открыть
Тестер регулярных выражений

Подсветка совпадений и групп, режим замены и разбор самого шаблона по-русски: что делает каждый кусок и почему выражение не сработало.

Открыть
Шифр Виженера

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

Открыть

Ещё инструменты для кода и данных

Base64 и URL, форматтер и сравнение JSON, хеши, регулярные выражения, cron, подсети, UUID, QR-код и Unix-время — в разделе 42 инструмента.