Jak używać
- Wklej oryginalny JSON po lewej, a zmieniony JSON po prawej lub wypróbuj przykład.
- Wybierz sposób porównywania tablic: według pozycji lub dopasowując elementy, aby wstawiony element był raportowany tylko raz.
- Przeglądaj różnice jako listę lub obok siebie. Każda ma ścieżkę od korzenia ($).
- Skopiuj raport, aby wkleić go do zgłoszenia lub przeglądu kodu.
Jak to działa
Oba dokumenty są analizowane i porównywane jako dane, a nie jako tekst. Obiekty są porównywane klucz po kluczu, więc kolejność kluczy oraz białe znaki i wcięcia nie mają znaczenia. Liczby są porównywane według wartości, więc 1 i 1.0 są równe.
Każda różnica ma ścieżkę zapisaną jak wyrażenie JSONPath: $ to korzeń, .name to właściwość, [2] to indeks tablicy, a klucze, które nie są prostymi nazwami, są w cudzysłowach, jak w $["first-name"]. Zgłaszane są cztery rodzaje różnic: dodane (tylko po prawej), usunięte (tylko po lewej), zmienione (ten sam typ, inna wartość) i zmiana typu (na przykład liczba 44.9 stała się ciągiem "44.90" lub wartość stała się wartością null). Gdy dodawany lub usuwany jest cały obiekt lub tablica, różnica jest zgłaszana raz w ścieżce tego elementu, a nie osobno dla każdego pola.
Domyślnie tablice są porównywane według pozycji: element 0 z elementem 0, element 1 z elementem 1. Jeśli element zostanie wstawiony na początku, każdy kolejny element wygląda wtedy na zmieniony. „Dopasuj przeniesione elementy” najpierw wyrównuje obie tablice, używając najdłuższego wspólnego podciągu równych elementów, dzięki czemu wstawienie lub usunięcie jest zgłaszane tylko raz, a pozostałe elementy są łączone w pary. Dodane elementy używają swojego indeksu po prawej stronie, a usunięte — indeksu po lewej stronie. Dopasowywanie jest pomijane w przypadku bardzo dużych tablic (powyżej około 2 milionów par elementów), które są wtedy porównywane według pozycji.
Ścieżki kluczy na liście są sortowane alfabetycznie w obrębie każdego obiektu. Wyświetlanych jest do 2 000 różnic; skopiowany raport zawsze zawiera wszystkie z nich.
Przykłady
Sprawdzanie zmiany w API
Porównaj wczorajszą i dzisiejszą odpowiedź dla tego samego zamówienia. Porównanie pokazuje, że $.status zmienił się z "pending" na "shipped", $.total zmienił typ z liczby na ciąg znaków, $.coupon został usunięty, a $.customer.phone został dodany.
Dryf konfiguracji
Wklej konfigurację JSON ze środowiska staging i produkcyjnego. Ponieważ kolejność kluczy jest ignorowana, pojawiają się tylko rzeczywiste różnice, np. $.cache.ttl 300 → 60, nawet jeśli pliki zostały zapisane przez różne narzędzia.
Listy z wstawionym elementem
Lista produktów zyskała nowy pierwszy element. Przy porównywaniu według pozycji każdy produkt wygląda na zmieniony; po wybraniu „Dopasuj przeniesione elementy” wynik to pojedynczy wpis „Dodano $[0]”.
Często zadawane pytania
Czym różni się to od porównania tekstowego?
Porównanie tekstowe porównuje wiersze, więc zmiana kolejności kluczy lub formatowania jest widoczna jako zmiany. To narzędzie porównuje sparsowane dane, więc raportowane są tylko różnice wartości, typów i struktury.
Dlaczego tablica pokazuje wiele zmian po jednym wstawieniu?
W trybie „Według pozycji” elementy są porównywane przy tym samym indeksie, a wstawienie przesuwa każdy kolejny element. Przełącz na „Dopasuj przeniesione elementy”, aby najpierw dopasować równe elementy.
Czy „1” i 1 są traktowane jako równe?
Nie. Jeden to ciąg znaków, a drugi liczba, więc różnica jest raportowana jako zmiana typu. Wartości tego samego typu są porównywane dokładnie.
Czy mogę porównywać bardzo duże pliki?
Pliki o rozmiarze kilku megabajtów działają, ale wszystko jest przetwarzane w pamięci przeglądarki, więc bardzo duże dokumenty mogą działać wolno na telefonach.
Prywatność
Oba dokumenty są analizowane i porównywane tylko w przeglądarce. Nic nie jest przesyłane, zapisywane ani uwzględniane w analityce.