JSON Diff: porównywanie obiektów JSON

Wklej dwa dokumenty JSON, aby zobaczyć dokładnie, co się zmieniło. Każda różnica jest opisana ścieżką, np. $.users[2].email, a formatowanie czy kolejność kluczy nie powodują fałszywych alarmów.

Działa w przeglądarceBez rejestracjiNic nie jest wysyłane

Kolejność kluczy jest zawsze ignorowana.

Jak używać: JSON Diff

  1. Wklej oryginalny JSON po lewej, a zmieniony po prawej, lub otwórz dwa pliki.
  2. Błędy składni są pokazywane pod każdym polem z numerem linii i kolumny, więc szybko je poprawisz.
  3. Przeczytaj tabelę Zmienione ścieżki: każdy wiersz pokazuje, czy wartość została dodana, usunięta czy zmieniona, wraz ze starą i nową wartością.
  4. Zaznacz Ignoruj kolejność w tablicach, gdy listy są zbiorami, np. tagi lub uprawnienia.
  5. Przewiń do widoku obok siebie, aby zobaczyć zmiany w kontekście, lub skopiuj listę zmian jako JSON.

Dlaczego strukturalny diff JSON jest lepszy od tekstowego

Zwykły diff tekstowy porównuje znaki i linie, więc dwa pliki JSON z tymi samymi danymi mogą wyglądać zupełnie inaczej, jeśli jeden jest zminifikowany, ma inne wcięcia lub inną kolejność kluczy. To narzędzie najpierw parsuje oba dokumenty i porównuje dane: obiekty są porównywane klucz po kluczu niezależnie od kolejności, a liczby, ciągi, wartości logiczne i null – według wartości. Raportowane są tylko rzeczywiste zmiany.

Jak raportowane są zmiany

Każda różnica otrzymuje lokalizację w stylu JSONPath, np. $.owner.email lub $.items[3].price, oraz jeden z trzech typów:

  • dodano: klucz lub element tablicy istnieje tylko w zmienionym JSON-ie.
  • usunięto: istnieje tylko w oryginalnym JSON-ie.
  • zmieniono: istnieje w obu, ale wartość się różni, w tym zmiany typu, np. ciąg, który stał się liczbą.

Tablice są wyrównywane algorytmem najdłuższego wspólnego podciągu (LCS), więc wstawienie jednego elementu na początku listy jest raportowane jako jedno dodanie, a nie jako zmiana każdego kolejnego elementu.

Ignorowanie kolejności w tablicach

Wiele API zwraca listy, których kolejność nie ma znaczenia, np. role, tagi czy identyfikatory. Przy włączonej opcji Ignoruj kolejność w tablicach tablice są porównywane jak kolekcje: element liczy się jako dodany lub usunięty tylko wtedy, gdy nie ma równego odpowiednika po drugiej stronie. Widok obok siebie sortuje wtedy elementy tablic, aby równe listy się pokrywały.

Typowe zastosowania

Porównywanie odpowiedzi API między stagingiem a produkcją, sprawdzanie, co migracja zmieniła w pliku konfiguracyjnym, przegląd różnic między dwoma plikami package.json lub tsconfig oraz debugowanie testów snapshotowych.

Najczęściej zadawane pytania

Czy kolejność kluczy ma znaczenie przy porównywaniu JSON?
Nie. Obiekty JSON są nieuporządkowane, więc {"a":1,"b":2} i {"b":2,"a":1} są uznawane za równe. Kolejność w tablicach domyślnie ma znaczenie, bo tablice są uporządkowane, ale możesz to wyłączyć opcją Ignoruj kolejność w tablicach.
Czy mój JSON jest wysyłany na serwer?
Nie. Oba dokumenty są parsowane i porównywane w przeglądarce. Nic nie jest przesyłane przez sieć, więc narzędzie jest bezpieczne dla odpowiedzi API z tokenami czy danymi klientów.
Co oznaczają ścieżki typu $.users[2].email?
$ to korzeń dokumentu, .users to klucz, a [2] to trzeci element tablicy (indeksy zaczynają się od 0). Klucze ze spacjami lub znakami specjalnymi są zapisywane w nawiasach, np. $["first name"].
Czy 1 to to samo co 1.0?
Tak. Obie wartości parsują się do tej samej liczby, więc nie są raportowane jako różnica. Liczba i ciąg, np. 1 i "1", są różne i są raportowane jako zmiana.
Czy mogę porównać JSON z komentarzami lub końcowymi przecinkami?
Standardowy JSON na nie nie pozwala, więc takie dane są oznaczane z dokładną linią i kolumną. Usuń komentarze lub przecinki albo najpierw wyczyść dokument w formaterze JSON.

Powiązane narzędzia