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
Zmienione ścieżki
| Zmiana | Ścieżka | Stara wartość | Nowa wartość |
|---|
Jak używać: JSON Diff
- Wklej oryginalny JSON po lewej, a zmieniony po prawej, lub otwórz dwa pliki.
- Błędy składni są pokazywane pod każdym polem z numerem linii i kolumny, więc szybko je poprawisz.
- 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ą.
- Zaznacz Ignoruj kolejność w tablicach, gdy listy są zbiorami, np. tagi lub uprawnienia.
- 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?
{"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?
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?
1 i "1", są różne i są raportowane jako zmiana.