← Назад к инструменту JSON

Сравнение JSON

Последнее обновление: 2 октября 2026 г.

Сравните два документа JSON и увидьте только реальные различия. Сравнение структурное, поэтому перестановка ключей или переформатирование ничего не меняет; отчёт перечисляет каждое настоящее изменение с его путём, целиком в браузере.

Структурно, не текстово Порядок ключей не важен Работает в браузере Без загрузки Открытый код (MIT)

Что видит структурное сравнение

Оба документа сначала разбираются, а затем обходятся вместе. Сообщаются только различия в самих данных: ключ, который есть на одной стороне и отсутствует на другой; изменившееся значение; значение, у которого сменился тип — число стало строкой, объект стал массивом. Пробелы и порядок ключей в сравнении вообще не участвуют, потому что после разбора их уже не существует.

Смена типа сообщается один раз по тому пути, где она произошла, а не разворачивается в удаление и добавление для каждого листового узла под ним. Это сохраняет отчёт читаемым, когда форму меняет целое поддерево.

Почему это не построчный текстовый diff

Текстовый diff — то, что показывает git diff, — сравнивает строки. Для JSON это часто вводит в заблуждение. Переиндентация файла или вывод тех же ключей в другом порядке — обычное дело, когда JSON порождают разные инструменты или версии библиотек, а построчное сравнение превращает это в стену изменений, хотя данные идентичны.

Два документа ниже — один и тот же документ. Построчный diff сообщит о четырёх изменённых строках, а этот инструмент — ни о чём:

{"a": 1, "b": 2}

{
  "b": 2,
  "a": 1
}

Верно и обратное, и это самое полезное: один изменённый символ в имени ключа или число, изменившееся с 3 на 4, показываются ровно одним изменением, а не тонут в шуме переформатирования.

Как читать запись пути

Каждое изменение сообщается с путём. $ — корень документа, точка ведёт к ключу объекта, а квадратные скобки индексируют массив. Так, $.settings.indent — это ключ indent внутри settings, $.features[2] — третий элемент массива features, а $["weird key"] обозначает ключ, не являющийся простым идентификатором. Запись следует стилю JSON Pointer, поэтому путь из отчёта можно вставить в другие инструменты JSON.

Чего сравнение не скажет

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

Влияет ли порядок ключей на результат сравнения?

Нет. Оба документа сначала разбираются, и ключи объектов сопоставляются по имени, а не по позиции. Поэтому переформатирование документа или вывод ключей в другом порядке даёт пустой результат — и это правильно, ведь данные те же.

Почему вставка одного элемента в начало массива даёт так много различий?

Массивы сопоставляются по позиции, как почти во всех структурных diff-инструментах. Вставка элемента в начало длинного массива сдвигает каждый следующий элемент на один индекс, поэтому каждый из них отмечается как изменённый, хотя значения лишь сместились. Без ключа для сопоставления невозможно понять, что было вставлено, а что изменено. Если у элементов есть стабильный id, отсортируйте обе стороны по нему перед сравнением.

Что если одна сторона не является допустимым JSON?

Сравнение останавливается, и показывается собственное сообщение парсера для той стороны, где произошла ошибка, с пометкой левая или правая. Пока оба документа не разберутся, их нельзя обойти вместе, поэтому сравнение не выполняется.

Мой JSON куда-нибудь загружается?

Нет. Оба документа разбираются через JSON.parse в браузере и сравниваются в памяти. Ни один запрос их не несёт, учётных записей и серверного хранилища нет. Можно загрузить страницу и затем отключиться от сети — сравнение продолжит работать.

Можно ли определить, что значение переместили, а не изменили?

Нет. Этот инструмент сообщает различия, а не создаёт патч. Он не выводит документ JSON Patch и не обнаруживает значения, перемещённые из одного места в другое; вы увидите удаление по старому пути и добавление по новому.

Можно ли сравнивать JSON с комментариями или висячими запятыми?

Нет. Сравнение использует тот же строгий парсер, что и остальные инструменты сайта, поэтому JSON5, комментарии и висячие запятые отклоняются. Если документ не разбирается, сначала посмотрите место ошибки в форматтере или валидаторе.

Нужно превратить JSON в таблицу? Для этого есть JSON в CSV. Нашли ошибку? Свяжитесь с нами.