YamlBox

JSON инструменты · 6 минута чтения

JSON diff: сравнение данных в том виде, в каком они на самом

Текстовый diff сообщает вам, какие символы изменились. Разница JSON сообщает вам, какие значения изменились, и это разные вопросы — часто с разными ответами. Поскольку порядок объектов JSON не имеет значения, полезная нагрузка, которую построчное сравнение отображает как полную перезапись, может структурно быть идентичной, в то время как подлинное изменение одного вложенного значения может скрываться внутри одной очень длинной минимизированной строки.

Обновлено

Почему текстовые различия не работают на JSON

Три свойства JSON прерывают сравнение на уровне символов. Порядок ключей не имеет значения, поэтому один и тот же объект, сериализованный двумя способами, строка за строкой выглядит по-разному. Пробелы не имеют значения, поэтому красиво напечатанный документ и его уменьшенный двойник выглядят совершенно по-разному. А массивы являются позиционными, поэтому одна вставка сдвигает каждую следующую строку и создает каскад ложных различий, которые скрывают одно реальное изменение.

Что вместо этого сообщает структурное сравнение?

Функция JSON diff анализирует оба документа, просматривает результирующие деревья и сообщает об изменениях по пути: добавленные ключи, удаленные ключи, значения, которые изменили тип или содержимое, а также перемещенные записи массива. Вывод читается как `spec.replicas: 3 → 5`, а не как двадцать строк сдвинутого контекста. Это та информация, которая вам нужна, когда развертывание ведет себя по-другому и вы хотите знать, что на самом деле изменилось в конфигурации.

                - spec.template.spec.containers[0].image
+   ghcr.io/acme/web:1.4.2 → ghcr.io/acme/web:1.5.0
- metadata.annotations["deployed-by"]   (removed)
              

Использование разницы JSON в реальной работе

  • Управление версиями API — сравните ответ v1 и v2 на один и тот же запрос и прочитайте изменение контракта прямо по путям.
  • Неудачные тестовые снимки — посмотрите, какое поле сместилось, вместо того, чтобы восстанавливать снимок и надеяться.
  • Обзор инфраструктуры — сравнение отображаемого манифеста до и после обновления диаграммы.
  • Проверки миграции — подтвердите, что при экспорте сохранены все ключи после изменения схемы или базы данных.

Порядок имеет значение для массивов, а не для объектов: переупорядоченный массив — это реальное изменение, а переупорядоченный объект — нет. Структурный JSON diff знает разницу; текстовая разница никогда не будет.

Практические детали, которые стоит знать

Оба документа должны быть действительными JSON, прежде чем какое-либо сравнение будет иметь смысл, поэтому ошибки проверки должны всплывать первыми, в строке и столбце. Следите за изменением типов, а также за изменением значений: `"3"` и `3` выглядят почти одинаково, но сбивают с толку потребителей, которые предполагают одно или другое. И когда одна сторона пуста или представляет собой один объект, а другая представляет собой массив, это обычно является признаком изменения формы API, а не изменения данных. Двухпанельный режим JSON делает видимыми обе стороны одновременно, что быстрее, чем сравнение файла с сохраненной копией.

Храните полезные данные локально

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

JSON Разница — часто задаваемые вопросы

Влияет ли порядок ключей на разницу JSON?

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

Как сравнить два недопустимых файла JSON?

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

Может ли разница JSON отображать значения, которые были добавлены или удалены?

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

Инструменты, упомянутые в этом посте

Просмотрите полный список инструментов 19

Еще статьи для чтения

6 минута чтения

Схема от JSON до JSON: от образца полезной нагрузки до

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

Все 19 публикации →