Сравнение JSON и JSON-патч

Вставьте два документа JSON. Страница перечисляет каждое добавленное, удалённое или изменённое значение с его путём и записывает патч RFC 6902, который превращает левый документ в правый.

Бесплатно Работает в браузере Проверено вторник, 10 ноября 2026 г.

Первый документ, обычно старая версия. Его значения — «до» каждого изменения.

Второй документ, обычно новая версия. Его значения — «после» каждого изменения.

Сравнивает массивы как наборы, поэтому элемент, который только переместился, не считается изменением.

Результат

Число различий — Добавленные, удалённые и изменённые значения вместе.
Валидность — Являются ли оба текста действительным JSON или какой из них не является.
Итог —
Проверка патча — Применяет патч к левому документу в браузере и сравнивает результат с правым документом.
JSON Patch (RFC 6902)
Различия

Этот инструмент работает в вашем браузере. То, что вы вводите, нам не отправляется.

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

  1. Вставьте старый JSON в поле Левый JSON, а новый — в поле Правый JSON.
  2. Отметьте Не учитывать порядок элементов массива, если массивы — это наборы, например списки тегов.
  3. Прочитайте таблицу Различия. Каждая строка даёт Путь (JSON Pointer) значения. Копируйте JSON Patch, когда Проверка патча сообщит, что он применяется.

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

Два документа сравниваются по значению. Порядок имён в объекте не важен, потому что JSON определяет объект как набор членов. Порядок элементов массива важен, если опция не отмечена, так как массив — это упорядоченный список.

Числа сравниваются как числа, поэтому 1 и 1,0 равны. RFC 8259, раздел 6, говорит, что целые числа от −(2^53)+1 до (2^53)−1 читаются одинаково каждой реализацией, а более длинное целое при чтении может быть округлено.

Пути и патч

Путь — это JSON Pointer (RFC 6901): каждый шаг — имя или индекс, разделённые косой чертой. Первый элемент списка тегов — это /tags/0, а пустой путь — весь документ. Косая черта внутри имени записывается как ~1, а тильда — как ~0.

JSON Patch (RFC 6902) использует три операции: add, remove и replace. Удалённые элементы массива убираются с последнего к первому, чтобы каждый индекс оставался верным, когда его используют, а добавленные элементы дописываются с индексом «-», который RFC 6902 определяет как конец массива.

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

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

Пример: документы по умолчанию

Левый документ содержит имя FireToolLand, версию 1, теги json и csv и free со значением true. В правом документе версия 2, теги csv, json и yaml, а license равен null. Если читать по порядку, различий шесть: version, два изменённых тега, добавленный тег yaml, удалённое free и добавленное license.

С отмеченной опцией Не учитывать порядок элементов массива теги — это те же два элемента в другом порядке, поэтому единственное различие тегов — yaml, и число падает до четырёх.

Результат Документы по умолчанию Порядок не учитывается
Число различий 6 4
Итог Добавлено: 2, удалено: 1, изменено: 3. Добавлено: 2, удалено: 1, изменено: 1.

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

Почему важен порядок элементов массива?

В JSON массив — упорядоченный список, поэтому [1,2] и [2,1] — разные данные. Отметьте «Не учитывать порядок элементов массива», когда массив — это набор, например список тегов или прав доступа.

Что означает путь вроде /tags/0?

Это JSON Pointer (RFC 6901): член tags, а затем его первый элемент, потому что индексы начинаются с 0. Пустой путь означает весь документ, а имя с косой чертой записывается через ~1 на её месте.

Равны ли 1 и 1,0 как значения?

Да. Оба — это число один, поэтому страница не сообщает о различии. Целые числа больше 2^53 может округлить разборщик JSON, поэтому длинные идентификаторы сравнивайте как текст.

Для чего нужен JSON Patch?

Это список шагов (RFC 6902), которые сервер или библиотека применяет к одному документу, чтобы получить другой, например чтобы обновить сохранённый файл настроек. Проверка патча показывает, что шаги дают правильный документ.

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

Когда порядок не учитывается, изменённому массиву нельзя поставить в соответствие один шаг, который превратит его в правильный, не зная, как переместились его элементы. Поэтому патч записывает правильный массив целиком.

Мой JSON куда-нибудь отправляется?

Нет. Оба текста читаются и сравниваются в вашем браузере, и ничего из вставленного не отправляется на наш сервер и не сохраняется там.

Источники

Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..

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