JSON Diff — это сравнение различий между двумя наборами данных JSON, определение добавленных, удалённых и изменённых полей между ними. В повседневной разработке нам часто нужно знать, «что именно изменилось» между двумя JSON: что изменилось в структуре ответа до и после обновления API, где конфигурации различаются между двумя средами, в каком поле реальный результат отклоняется от ожидаемой базы в автотестах. Ручная проверка построчно медленна и подвержена ошибкам, инструмент JSON Diff автоматически выделяет различия.
Сравнение различий JSON обычно имеет два подхода. Один — «текстовый diff» (textual diff): после форматирования JSON в стандартизированный многострочный текст сравнивает построчно подобно Git diff, наглядно показывая добавления/удаления/изменения в каждой строке. Другой — «семантический/структурный diff» (structural diff): разбирает JSON в древовидную структуру, сравнивает значения и типы по пути поля (например user.address.city), не завися от порядка записи полей, отступов и других факторов форматирования. Этот инструмент предлагает как текстовый, так и семантический режимы, переключаемые по необходимости.
Зачем форматировать перед сравнением? Потому что одни и те же данные могут иметь совершенно разное форматирование (одна строка vs несколько строк, 2 пробела vs 4 пробела), если сравнивать напрямую по исходному тексту, возникнет множество «ложных различий», вызванных различиями в форматировании. Этот инструмент перед сравнением автоматически разбирает и единообразно форматирует JSON с обеих сторон, устраняя влияние пробельных символов, чтобы вы видели только действительно значимые изменения данных.
Важно отметить, что порядок ключей в объектах JSON семантически не важен ({"a":1,"b":2} эквивалентно {"b":2,"a":1}), но порядок элементов в массивах имеет значение ([1,2] отличается от [2,1]). Поэтому если вам важно только совпадение содержимого массива независимо от порядка, рекомендуется отсортировать массивы или ключи перед сравнением, чтобы изменения порядка ошибочно не считались различиями.
Всё форматирование и сравнение этого инструмента выполняются локально в браузере, данные не отправляются на сервер; также поддерживается посимвольная подсветка, подсчёт добавлений/удалений/изменений, одновременное сравнение на нескольких вкладках и обмен сценариями сравнения через URL, подходит для интеграции API, сравнения конфигураций, утверждений в тестах и ревью кода.