JSON Diff: сравнение JSON-объектов
Вставьте два JSON-документа и увидите, что именно изменилось. Каждое различие указано по пути, например $.users[2].email, а форматирование или порядок ключей не вызывают ложных срабатываний.
Работает в браузереБез регистрацииНичего не загружается
Изменённые пути
| Изменение | Путь | Старое значение | Новое значение |
|---|
Как пользоваться: JSON Diff
- Вставьте исходный JSON слева, а изменённый справа или откройте два файла.
- Синтаксические ошибки показываются под каждым полем со строкой и столбцом, чтобы их можно было быстро исправить.
- Изучите таблицу Изменённые пути: в каждой строке видно, было ли значение добавлено, удалено или изменено, со старым и новым значением.
- Отметьте Игнорировать порядок в массивах, если списки — это множества, например теги или права доступа.
- Прокрутите к виду бок о бок, чтобы увидеть изменения в контексте, или скопируйте список изменений как JSON.
Почему структурный JSON diff лучше текстового
Обычный текстовый diff сравнивает символы и строки, поэтому два JSON-файла с одинаковыми данными могут выглядеть совершенно разными, если один минифицирован, имеет другие отступы или иной порядок ключей. Этот инструмент сначала разбирает оба документа и сравнивает данные: объекты сравниваются по ключам независимо от порядка, а числа, строки, логические значения и null — по значению. Сообщается только о реальных изменениях.
Как отображаются изменения
Каждое различие получает путь в стиле JSONPath, например $.owner.email или $.items[3].price, и один из трёх типов:
- добавлено: ключ или элемент массива есть только в изменённом JSON.
- удалено: он есть только в исходном JSON.
- изменено: он есть в обоих, но значение отличается, включая смену типа, например строка стала числом.
Массивы выравниваются алгоритмом наибольшей общей подпоследовательности, поэтому вставка одного элемента в начало списка отображается как одно добавление, а не как изменение всех последующих элементов.
Игнорирование порядка в массивах
Многие API возвращают списки, порядок которых ничего не значит: роли, теги или ID. С опцией Игнорировать порядок в массивах массивы сравниваются как коллекции: элемент считается добавленным или удалённым, только если у него нет равного элемента на другой стороне. Вид бок о бок тогда сортирует элементы массивов, чтобы одинаковые списки совпадали.
Типичные сценарии
Сравнивайте ответы API между staging и production, проверяйте, что миграция изменила в конфиге, смотрите различия между двумя package.json или tsconfig и отлаживайте snapshot-тесты.
Часто задаваемые вопросы
Важен ли порядок ключей при сравнении JSON?
{"a":1,"b":2} и {"b":2,"a":1} считаются равными. Порядок в массивах по умолчанию важен, потому что массивы упорядочены, но это можно отключить опцией Игнорировать порядок в массивах.Загружается ли мой JSON на сервер?
Что означают пути вроде $.users[2].email?
$ — корень документа, .users — ключ, а [2] — третий элемент массива (индексы начинаются с 0). Ключи с пробелами или спецсимволами записываются в скобках, например $["first name"].Равно ли 1 значению 1.0?
1 и "1", различаются и отображаются как изменение.