tigtools

Порівняння JSON

Вставте два JSON-документи, щоб побачити, які саме значення відрізняються, зі списком шляхів, як-от $.order.items[2].price.

Працює у вашому браузері Без реєстрації

Порівняння масивів
Показати

Як користуватися

  1. Вставте оригінальний JSON ліворуч, а змінений JSON — праворуч, або спробуйте приклад.
  2. Виберіть, як порівнювати масиви: за позиціями або зіставляючи елементи, щоб вставлений елемент повідомлявся один раз.
  3. Переглядайте відмінності списком або поруч. Кожна з них має шлях від кореня ($).
  4. Скопіюйте звіт, щоб вставити його в тікет або огляд коду.

Як це працює

Обидва документи розбираються та порівнюються як дані, а не як текст. Об’єкти порівнюються за ключами, тому порядок ключів, пробіли та відступи не мають значення. Числа порівнюються за значенням, тому 1 і 1.0 рівні.

Кожна відмінність має шлях, записаний як вираз JSONPath: $ — корінь, .name — властивість, [2] — індекс масиву, а ключі, які не є простими іменами, беруться в лапки, як-от $["first-name"]. Повідомляється про чотири типи відмінностей: додано (лише праворуч), видалено (лише ліворуч), змінено (той самий тип, інше значення) і змінено тип (наприклад, число 44.9 стало рядком "44.90" або значення стало null). Якщо цілий об’єкт або масив додано чи видалено, про це повідомляється один раз за його власним шляхом, а не окремо для кожного поля.

Масиви за замовчуванням порівнюються за позиціями: елемент 0 з елементом 0, елемент 1 з елементом 1. Якщо елемент вставлено на початку, то всі наступні елементи виглядають зміненими. Параметр «Зіставляти переміщені елементи» спочатку вирівнює два масиви за допомогою найдовшої спільної підпослідовності однакових елементів, тому вставка або видалення повідомляється лише один раз, а решта елементів утворює пари. Додані елементи використовують свій індекс праворуч, видалені — свій індекс ліворуч. Зіставлення пропускається для дуже великих масивів (понад приблизно 2 мільйони пар елементів), які потім порівнюються за позиціями.

Шляхи ключів у списку сортуються за алфавітом у межах кожного об’єкта. Відображається до 2 000 відмінностей; скопійований звіт завжди містить їх усі.

Приклади

Перевірка зміни API

Порівняйте вчорашню й сьогоднішню відповідь для того самого замовлення. У порівнянні видно, що $.status змінився з "pending" на "shipped", $.total змінив тип з числа на рядок, $.coupon видалено, а $.customer.phone додано.

Розбіжність конфігурацій

Вставте JSON-конфігурацію зі стейджингу та з продакшну. Оскільки порядок ключів ігнорується, відображаються лише справжні відмінності, як-от $.cache.ttl 300 → 60, навіть якщо файли зберегли різні інструменти.

Списки зі вставленим елементом

Список товарів отримав новий перший елемент. У режимі «За позиціями» здається, що змінилися всі товари; якщо ввімкнути «Зіставляти переміщені елементи», результатом буде лише одне «Додано $[0]».

Поширені запитання

Чим це відрізняється від текстового diff?

Текстовий diff порівнює рядки, тому зміна порядку ключів або переформатування відображається як зміни. Цей інструмент порівнює розібрані дані, тому повідомляє лише про відмінності в значеннях, типах і структурі.

Чому масив показує багато змін після однієї вставки?

У режимі «За позиціями» елементи порівнюються за однаковим індексом, і вставка зсуває всі наступні елементи. Перемкніться на «Зіставляти переміщені елементи», щоб спершу вирівняти однакові елементи.

Чи вважаються «1» і 1 однаковими?

Ні. Одне значення — рядок, а інше — число, тому відмінність повідомляється як зміна типу. Значення однакового типу порівнюються точно.

Чи можу я порівнювати дуже великі файли?

Файли розміром у кілька мегабайтів працюють, але все обробляється в пам’яті вашого браузера, тому дуже великі документи можуть бути повільними на телефонах.

Конфіденційність

Обидва документи обробляються та порівнюються лише у вашому браузері. Нічого не вивантажується, не зберігається й не потрапляє в аналітику.