tigtools

JSON Diff

Вставьте два JSON-документа, чтобы увидеть, какие именно значения различаются, с указанием пути, например $.order.items[2].price.

Работает в браузере Без регистрации

Сравнивать массивы
Показать

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

  1. Вставьте исходный JSON слева и изменённый JSON справа или попробуйте пример.
  2. Выберите способ сравнения массивов: по позиции или с сопоставлением элементов, чтобы вставленный элемент отображался один раз.
  3. Просматривайте различия списком или бок о бок. У каждого есть путь от корня ($).
  4. Скопируйте отчёт, чтобы вставить его в тикет или код-ревью.

Как это работает

Оба документа разбираются и сравниваются как данные, а не как текст. Объекты сравниваются по ключам, поэтому порядок ключей, пробелы и отступы не имеют значения. Числа сравниваются по значению, поэтому 1 и 1.0 равны.

Каждое различие имеет путь, записанный как выражение JSONPath: $ — корень, .name — свойство, [2] — индекс массива, а ключи, которые не являются простыми именами, заключаются в кавычки, например $["first-name"]. Сообщается о четырёх видах различий: добавлено (только справа), удалено (только слева), изменено (тот же тип, другое значение) и изменён тип (например, число 44.9 стало строкой "44.90" или значение стало null). Если добавлен или удалён целый объект или массив, об этом сообщается один раз по его собственному пути, а не для каждого поля.

По умолчанию массивы сравниваются по позициям: элемент 0 с элементом 0, элемент 1 с элементом 1. Если элемент вставлен в начало, все последующие элементы выглядят изменёнными. Режим «Сопоставлять перемещённые элементы» сначала выравнивает два массива с помощью наибольшей общей подпоследовательности равных элементов, поэтому вставка или удаление сообщается только один раз, а остальные элементы сопоставляются попарно. Добавленные элементы используют свой индекс справа, удалённые — свой индекс слева. Сопоставление пропускается для очень больших массивов (свыше примерно 2 миллионов пар элементов), которые затем сравниваются по позициям.

Пути ключей в списке сортируются по алфавиту внутри каждого объекта. Отображается до 2 000 различий; скопированный отчёт всегда содержит все различия.

Примеры

Проверка изменения API

Сравните вчерашний и сегодняшний ответы для одного и того же заказа. Diff покажет, что $.status изменился с "pending" на "shipped", $.total изменил тип с числа на строку, $.coupon удалён, а $.customer.phone добавлен.

Дрейф конфигурации

Вставьте JSON-конфиг из staging и production. Поскольку порядок ключей игнорируется, отображаются только реальные различия, например $.cache.ttl 300 → 60, даже если файлы были сохранены разными инструментами.

Списки со вставленным элементом

В список товаров добавили новый первый элемент. При сравнении по позиции каждый товар кажется изменённым; при включённом «Сопоставлять перемещённые элементы» результатом будет одно «Добавлено $[0]».

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

Чем это отличается от текстового сравнения?

Текстовое сравнение сопоставляет строки, поэтому перестановка ключей или переформатирование отображаются как изменения. Этот инструмент сравнивает разобранные данные, поэтому сообщается только о различиях в значениях, типах и структуре.

Почему после одной вставки массив показывает много изменений?

В режиме «По позиции» элементы сравниваются по одному и тому же индексу, и вставка сдвигает все последующие элементы. Переключитесь на «Сопоставлять перемещённые элементы», чтобы сначала выровнять одинаковые элементы.

Считаются ли "1" и 1 равными?

Нет. Одно значение — строка, другое — число, поэтому различие определяется как изменение типа. Значения одного типа сравниваются точно.

Можно ли сравнивать очень большие файлы?

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

Конфиденциальность

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