JSON Diff: сравнение JSON-объектов

Вставьте два JSON-документа и увидите, что именно изменилось. Каждое различие указано по пути, например $.users[2].email, а форматирование или порядок ключей не вызывают ложных срабатываний.

Работает в браузереБез регистрацииНичего не загружается

Порядок ключей всегда игнорируется.

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

  1. Вставьте исходный JSON слева, а изменённый справа или откройте два файла.
  2. Синтаксические ошибки показываются под каждым полем со строкой и столбцом, чтобы их можно было быстро исправить.
  3. Изучите таблицу Изменённые пути: в каждой строке видно, было ли значение добавлено, удалено или изменено, со старым и новым значением.
  4. Отметьте Игнорировать порядок в массивах, если списки — это множества, например теги или права доступа.
  5. Прокрутите к виду бок о бок, чтобы увидеть изменения в контексте, или скопируйте список изменений как JSON.

Почему структурный JSON diff лучше текстового

Обычный текстовый diff сравнивает символы и строки, поэтому два JSON-файла с одинаковыми данными могут выглядеть совершенно разными, если один минифицирован, имеет другие отступы или иной порядок ключей. Этот инструмент сначала разбирает оба документа и сравнивает данные: объекты сравниваются по ключам независимо от порядка, а числа, строки, логические значения и null — по значению. Сообщается только о реальных изменениях.

Как отображаются изменения

Каждое различие получает путь в стиле JSONPath, например $.owner.email или $.items[3].price, и один из трёх типов:

  • добавлено: ключ или элемент массива есть только в изменённом JSON.
  • удалено: он есть только в исходном JSON.
  • изменено: он есть в обоих, но значение отличается, включая смену типа, например строка стала числом.

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

Игнорирование порядка в массивах

Многие API возвращают списки, порядок которых ничего не значит: роли, теги или ID. С опцией Игнорировать порядок в массивах массивы сравниваются как коллекции: элемент считается добавленным или удалённым, только если у него нет равного элемента на другой стороне. Вид бок о бок тогда сортирует элементы массивов, чтобы одинаковые списки совпадали.

Типичные сценарии

Сравнивайте ответы API между staging и production, проверяйте, что миграция изменила в конфиге, смотрите различия между двумя package.json или tsconfig и отлаживайте snapshot-тесты.

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

Важен ли порядок ключей при сравнении JSON?
Нет. Объекты JSON неупорядочены, поэтому {"a":1,"b":2} и {"b":2,"a":1} считаются равными. Порядок в массивах по умолчанию важен, потому что массивы упорядочены, но это можно отключить опцией Игнорировать порядок в массивах.
Загружается ли мой JSON на сервер?
Нет. Оба документа разбираются и сравниваются в вашем браузере. Ничего не передаётся по сети, поэтому инструмент безопасен для ответов API с токенами или данными клиентов.
Что означают пути вроде $.users[2].email?
$ — корень документа, .users — ключ, а [2] — третий элемент массива (индексы начинаются с 0). Ключи с пробелами или спецсимволами записываются в скобках, например $["first name"].
Равно ли 1 значению 1.0?
Да. Оба разбираются в одно и то же число, поэтому различием не считаются. Число и строка, например 1 и "1", различаются и отображаются как изменение.
Можно ли сравнить JSON с комментариями или висячими запятыми?
Стандартный JSON их не допускает, поэтому такой ввод помечается ошибкой с точной строкой и столбцом. Удалите комментарии или запятые либо сначала очистите документ в JSON-форматтере.

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