Как пользоваться
- Вставьте исходный JSON слева и изменённый JSON справа или попробуйте пример.
- Выберите способ сравнения массивов: по позиции или с сопоставлением элементов, чтобы вставленный элемент отображался один раз.
- Просматривайте различия списком или бок о бок. У каждого есть путь от корня ($).
- Скопируйте отчёт, чтобы вставить его в тикет или код-ревью.
Как это работает
Оба документа разбираются и сравниваются как данные, а не как текст. Объекты сравниваются по ключам, поэтому порядок ключей, пробелы и отступы не имеют значения. Числа сравниваются по значению, поэтому 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 равными?
Нет. Одно значение — строка, другое — число, поэтому различие определяется как изменение типа. Значения одного типа сравниваются точно.
Можно ли сравнивать очень большие файлы?
Файлы в несколько мегабайт работают, но всё обрабатывается в памяти вашего браузера, поэтому очень большие документы могут тормозить на телефонах.
Конфиденциальность
Оба документа разбираются и сравниваются только в вашем браузере. Ничего не загружается, не сохраняется и не включается в аналитику.