Wszystkie artykuły

JSON Diff: czym porównanie strukturalne różni się od tekstowego

Jeśli porównać dwa dokumenty JSON zwykłym diffem tekstowym (jak w przypadku kodu), wynik jest często mylący: te same dane można zapisać z różną kolejnością kluczy, różnymi wcięciami czy różną liczbą spacji — a diff tekstowy pokaże „różnicę" tam, gdzie dane są w rzeczywistości identyczne.

Porównanie strukturalne

Strukturalny JSON Diff parsuje oba dokumenty do drzewa wartości i porównuje same dane: czy pole istnieje, jaką wartość zawiera, czy zgadza się typ. Kolejność kluczy obiektu, zbędne spacje czy styl wcięć nie są przy tym brane pod uwagę — nie są częścią samych danych.

Co pokazuje diff

Typowy wynik porównania strukturalnego wyróżnia trzy kategorie zmian: pola dodane w drugim dokumencie, pola usunięte z pierwszego oraz pola istniejące w obu, ale o różnych wartościach. W przypadku tablic porównanie jest trudniejsze — trzeba zdecydować, czy porównywać elementy według pozycji, czy próbować dopasować podobne obiekty.

Do czego to potrzebne

  • Porównanie odpowiedzi API przed i po zmianie na backendzie, aby zobaczyć rzeczywiste zmiany w danych.
  • Sprawdzenie, czy zmiana w pliku konfiguracyjnym nie dotknęła niczego niezamierzonego.
  • Znalezienie regresji w testach, gdzie oczekiwany i rzeczywisty JSON się różnią.

Dlaczego pl.json ma więcej kluczy liczby mnogiej niż en.json

Polska odmiana liczebników jest wyjątkowo rozbudowana — reguły CLDR definiują dla polskiego aż cztery kategorie liczby mnogiej (one, few, many, other), bo "1 plik", "2 pliki" i "5 plików" wymagają trzech różnych końcówek, nie licząc formy ułamkowej. Plik tłumaczenia pl.json w bibliotece takiej jak react-i18next będzie więc miał więcej kluczy dla tego samego komunikatu niż angielski en.json, który rozróżnia tylko "one" i "other". Diff strukturalny między nimi pokaże te dodatkowe klucze jako różnicę strukturalną — i to prawidłowe zachowanie, nie błąd w tłumaczeniu.

Porównywanie tablic: według pozycji czy według klucza

Najprostsze podejście to porównywanie elementów tablicy indeks po indeksie, ale jeśli w środek tablicy wstawiono nowy element, wszystkie kolejne pozycje się „przesuwają" i diff pokaże zmianę w każdym elemencie po punkcie wstawienia, choć w rzeczywistości zmienił się tylko jeden. Bardziej zaawansowane narzędzia próbują dopasować elementy według unikalnego pola (np. id), aby pokazać właśnie wstawienie lub usunięcie, a nie kaskadę fałszywych zmian.

Wypróbuj narzędzie