~/tools/json/patch-diff

JSON

JSON Patch (RFC 6902) Diff Generator

Сгенерировать JSON Patch между двумя JSON-документами.

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

Нужно передать по сети не весь обновленный объект целиком, а только список конкретных изменений между старой и новой версией? Именно для этого существует стандарт JSON Patch по RFC 6902, набор операций add, remove и replace с точными путями к измененным полям. Json patch diff generator online сравнивает два json документа и генерирует такой патч автоматически.

Инструмент рекурсивно проходит оба объекта и для каждого различающегося поля решает, какая операция нужна: add если ключ появился только во втором документе, remove если ключ пропал, и replace если значение по одному и тому же пути изменилось на другое.

Полезно применять при синхронизации состояния между клиентом и сервером через PATCH запросы, при построении систем аудита изменений записей в базе данных, или просто чтобы визуально понять, что именно поменялось между двумя версиями конфига без построчного сравнения глазами.

Частые вопросы

Поддерживает ли генератор операцию move из спецификации JSON Patch?

Текущая реализация генерирует только add, remove и replace, операция move, которая переносит значение с одного пути на другой одной командой, в эту версию не входит и такие изменения будут показаны как отдельные remove и add.

Как обрабатываются изменения внутри массивов?

Если элемент массива изменился по значению целиком, а не как объект с полями, это будет показано как replace всего значения по индексу массива, а не поэлементное сравнение содержимого.

Можно ли применить получившийся патч обратно к исходному документу?

Да, формат результата соответствует стандарту RFC 6902, такой патч можно применить любой библиотекой, поддерживающей JSON Patch, на любом языке программирования, от JavaScript до Python и Go.

Что если структура двух документов совсем разная, а не просто немного отличается?

Инструмент все равно сгенерирует патч, просто он окажется длинным списком операций remove и add практически по всем полям, что технически корректно, но менее полезно для действительно сильно различающихся документов.