JSON Diff: сравняване на JSON обекти

Поставете два JSON документа, за да видите точно какво се е променило. Всяка разлика е показана по път, например $.users[2].email, а форматирането или редът на ключовете никога не водят до фалшиви тревоги.

Работи в браузъраБез регистрацияНищо не се качва

Редът на ключовете винаги се игнорира.

Как да използвате: JSON Diff

  1. Поставете оригиналния JSON вляво и променения вдясно или отворете два файла.
  2. Синтактичните грешки се показват под всяко поле с ред и колона, за да ги поправите бързо.
  3. Прегледайте таблицата Променени пътища: всеки ред показва дали стойността е добавена, премахната или променена, със старата и новата стойност.
  4. Отметнете Игнорирай реда в масивите, когато списъците са множества, например тагове или права.
  5. Превъртете до изгледа един до друг, за да видите промените в контекст, или копирайте списъка с промени като JSON.

Защо структурният JSON diff е по-добър от текстовия

Обикновеният текстов diff сравнява символи и редове, така че два JSON файла с едни и същи данни могат да изглеждат напълно различно, ако единият е минифициран, с различни отстъпи или с ключове в друг ред. Този инструмент първо парсира двата документа и сравнява данните: обектите се сравняват ключ по ключ независимо от реда, а числата, низовете, булевите стойности и null — по стойност. Отчитат се само реални промени.

Как се отчитат промените

Всяка разлика получава местоположение в стил JSONPath, например $.owner.email или $.items[3].price, и един от три типа:

  • добавено: ключът или елементът на масива съществува само в променения JSON.
  • премахнато: съществува само в оригиналния JSON.
  • променено: съществува и в двата, но стойността се различава, включително промени на типа, например низ, станал число.

Масивите се подравняват с алгоритъм за най-дълга обща подредица, така че вмъкването на един елемент в началото на списък се отчита като едно добавяне, вместо всички следващи елементи да се маркират като променени.

Игнориране на реда в масивите

Много API връщат списъци, чийто ред няма значение, например роли, тагове или ID. С включено Игнорирай реда в масивите масивите се сравняват като колекции: елемент се брои за добавен или премахнат само ако няма равен съответстващ елемент от другата страна. Изгледът един до друг тогава сортира елементите на масивите, за да се подравнят еднаквите списъци.

Типични приложения

Сравнявайте отговори от API между staging и production, проверявайте какво е променила миграция в конфигурационен файл, преглеждайте разликите между два package.json или tsconfig файла и дебъгвайте snapshot тестове.

Често задавани въпроси

Има ли значение редът на ключовете при сравняване на JSON?
Не. JSON обектите са неподредени, така че {"a":1,"b":2} и {"b":2,"a":1} се отчитат като равни. Редът в масивите по подразбиране има значение, защото масивите са подредени, но можете да го изключите с Игнорирай реда в масивите.
Качва ли се моят JSON на сървър?
Не. Двата документа се парсират и сравняват в браузъра ви. Нищо не се изпраща по мрежата, което прави инструмента безопасен за отговори от API с токени или клиентски данни.
Какво означават пътища като $.users[2].email?
$ е коренът на документа, .users е ключ, а [2] е третият елемент на масив (индексите започват от 0). Ключове с интервали или специални символи се записват в скоби, например $["first name"].
Равно ли е 1 на 1.0?
Да. И двете се парсират до едно и също число, така че не се отчитат като разлика. Число и низ, например 1 и "1", са различни и се отчитат като промяна.
Мога ли да сравня JSON с коментари или крайни запетаи?
Стандартният JSON не ги позволява, затова такъв вход се маркира с точния ред и колона. Премахнете коментарите или запетаите или първо почистете документа в JSON форматера.

Свързани инструменти