Oryginalny JSON
Zmieniony JSON

JSON Diff: Porównaj Dwa Pliki JSON Online

Wklej, sformatuj i porównaj dwa fragmenty JSON obok siebie. Walidacja, pretty-print i minifikacja wbudowane.

Czym jest narzędzie JSON diff?

Darmowe narzędzie działające w przeglądarce do porównywania dwóch dokumentów JSON. Wklej starą wersję po lewej, nową po prawej, a różnice podświetlają się znak po znaku. Nic nie opuszcza Twojej maszyny.

Do walidacji używa natywnej funkcji JSON.parse przeglądarki. Jest przycisk Format, gdy Twój JSON to jedna ogromna zminifikowana linia, przycisk Minify dla odwrotnego przypadku oraz walidacja na żywo, która oznacza błędy składni, gdy piszesz.

Jeśli kiedykolwiek wpatrywałeś się w 6000-liniowy diff openapi.json w PR na GitHubie, próbując znaleźć to jedno pole, które zepsuło klienta downstream, to jest narzędzie, które doprowadzi Cię tam w sekundach.

Jak diff naprawdę działa

Diff działa na poziomie znaków, a następnie jest oczyszczany przez postprocessing semantyczny, dzięki czemu podświetlenia trafiają na sensowne fragmenty zamiast losowych znaków. Wstawienia pojawiają się na zielono w prawym panelu, usunięcia na czerwono w lewym.

JSON ma własne specyficzne cechy, które wskazuje specyfikacja. Specyfikacja JSON w RFC 8259 definiuje obiekty jako nieuporządkowane, więc zmiana kolejności kluczy jest technicznie operacją bez efektu, mimo że diff tekstowy ją oznaczy. Rozwiązujemy to dając Ci przycisk Format po każdej stronie: sformatuj oba, potem porównaj, a kolejność będzie spójna. Do głębszej pracy strukturalnej zajrzyj do JSON Patch (RFC 6902) lub prostszego formatu JSON Merge Patch (RFC 7396), które są dwoma standardowymi sposobami opisywania zmiany JSON jako danych.

Gdy kolejność ma znaczenie dla hashowania lub podpisywania, odpowiednią specyfikacją jest RFC 8785 (JSON Canonicalization Scheme). Posortuj klucze, znormalizuj formatowanie liczb, potem zrób diff.

Jak porównać JSON w trzech krokach

Dwa panele tekstowe, jeden diff. Bez rejestracji, bez wysyłania, bez wycieczki na serwer.

  1. 1

    Wklej lub wgraj swój JSON

    Wklej stary JSON po lewej, nowy JSON po prawej. Albo kliknij Upload po dowolnej stronie, aby wczytać plik .json bezpośrednio. Przycisk Sample wypełni oba panele małym przykładem, jeśli chcesz najpierw zobaczyć narzędzie w akcji.

  2. 2

    Sformatuj obie strony dla uczciwego porównania

    Kliknij Format w każdym panelu, aby zrobić pretty-print z wcięciem dwóch spacji. Normalizuje to białe znaki i podziały linii, dzięki czemu diff podświetla rzeczywiste zmiany danych, a nie różnice w formatowaniu. Plakietka walidacji robi się zielona, gdy Twój JSON parsuje się czysto.

  3. 3

    Czytaj diff

    Usunięcia pojawiają się z czerwonym podświetleniem po lewej, wstawienia z zielonym po prawej. Przewijaj jedną stronę, druga podąża za nią. Liczniki zmian w każdym nagłówku mówią, ile odrębnych edycji znalazł diff.

Kiedy JSON diff to właściwe narzędzie

Audyt zmian polityk IAM przed zastosowaniem

Wklej bieżący wynik aws iam get-policy-version na tle proponowanego JSON, aby zobaczyć dokładnie, które wpisy Action zostały dodane lub czy ktoś podrzucił "Resource": "*" do wcześniej konkretnej instrukcji. Konsola AWS przearanżowuje instrukcje przy zapisie, co czyni diff GitHuba mylącym; sformatuj tutaj obie strony, a prawdziwa zmiana będzie oczywista.

Wykrywanie cichego dryfu w planie Terraform

Gdy terraform show -json tfplan zwraca blob 4 MB, oglądanie tego oczami jest beznadziejne. Porównaj dzisiejszy plan z wczorajszym, aby ujawnić aws_security_group_rule, którą ktoś dodał pod PR-em refaktoryzacyjnym, lub blok lifecycle.ignore_changes, który po cichu zniknął.

Przegląd zmian schematu OpenAPI przed mergem

Diff o 6000 linii openapi.json jest nieczytelny, gdy generator kodu przearanżowuje paths alfabetycznie. Sformatuj obie strony, porównaj, a faktyczna zmiana wychodzi na wierzch: pole required dodane do CreateOrderRequest lub odpowiedź 200, której schemat po cichu zmienił się z string na string | null.

Debugowanie package-lock.json po mergu

Po rozwiązaniu konfliktu w package-lock.json porównaj swój rozwiązany plik z lockfile'em z main, aby wyłapać przechodni downgrade. npm czasami rozwiązuje ten sam zakres semver do różnych dokładnych wersji na różnych maszynach, co jest faktyczną przyczyną "działa u mnie, nie działa w CI". Przeczytaj dokumentację package-lock.json, aby dowiedzieć się, co znaczy każde pole.

Porównywanie mapowań Elasticsearch między środowiskami

Wyciągnij GET /my-index/_mapping ze stagingu i prod, wrzuć oba do diffa. Prod może wciąż mieć "type": "text" na polu, które staging zmigrował na "keyword" w zeszłym sprincie, dlatego zapytanie agregujące nie zwraca nic w prod, a działa lokalnie. Mapowania zagnieżdżają się na pięć lub sześć poziomów głęboko, a diff tekstowy zakopuje to w szumie.

Reprodukcja niestabilnych mocków API

Gdy test Playwright przechodzi lokalnie i nie działa w CI, przechwyć ciało odpowiedzi JSON, które test faktycznie zobaczył, i porównaj je z fixturem w repo. Często to znacznik czasu createdAt lub pole traceId, którego nikt nie przypiął, a strukturalny diff sprawia, że problematyczny klucz staje się oczywisty zamiast zrzucać Cię w ścianę sformatowanego tekstu.

JSON szybka referencja

Krótka ściąga dla skrajnych przypadków parsowania, które to narzędzie ujawnia najczęściej. Wszystko jest oparte na specyfikacji JSON.

TopicWhat this tool does
Kolejność kluczy obiektuNieuporządkowana zgodnie ze specyfikacją. {"a":1,"b":2} równa się {"b":2,"a":1}. Użyj Sortuj klucze, aby znormalizować przed porównywaniem.
Kolejność tablicyUporządkowana. [1,2,3] nie jest równe [3,2,1]. Posortuj ręcznie, jeśli kolejność nie ma znaczenia dla Twojego przypadku.
Przecinki końcoweNiedozwolone. { "a": 1, } to błąd parsowania w standardowym JSON. Dozwolone w JSON5/JSONC, które są nadzbiorami — najpierw je usuń.
KomentarzeNiedozwolone. // jak ten to błąd parsowania. JSON5 i JSONC je akceptują; to narzędzie podąża za ścisłą gramatyką RFC 8259.
LiczbyParsowane jako 64-bitowe floaty IEEE 754. 0.1 + 0.2 = 0.30000000000000004. Liczby całkowite powyżej 2^53 − 1 tracą precyzję; przechowuj snowflake ID jako stringi.
Zduplikowane kluczeSpecyfikacja nazywa to zachowaniem niezdefiniowanym. Większość parserów zachowuje ostatnie wystąpienie. Diff pokazuje wszystkie, co zwykle jest tym, czego chcesz przy audycie plików konfiguracyjnych.
KodowanieTylko UTF-8. RFC 8259 zabrania UTF-8 BOM na początku dokumentu; niektóre parsery i tak go akceptują, ale specyfikacja nie.
Null vs brakującyKlucz z wartością null jest obecny. Brakujący klucz jest nieobecny. Inaczej niż JavaScript'owe undefined, które nie ma reprezentacji w JSON.

JSON diff: często zadawane pytania

Czy zapisuje lub wgrywa mój JSON gdziekolwiek?

Nie. Diff działa w całości w Twojej przeglądarce. Nic nie jest wysyłane na serwer, logowane ani przechowywane. Wklej wewnętrzną odpowiedź API albo politykę IAM i zamknij kartę; nigdzie nie zostanie kopia. Aby zweryfikować, otwórz DevTools, przejdź do zakładki Network i obserwuj — gdy porównujesz, nie ma żadnych żądań wychodzących.

Czy zmiana kolejności kluczy lub pretty-print JSON pokaże się jako zmiana?

Tak, oba się pokazują. Diff tekstowy porównuje znaki linia po linii, więc przeformatowanie, zmiana kolejności kluczy lub zmiany białych znaków pokazują się jako różnice, nawet gdy dane są identyczne. Kliknij przycisk Format na obu panelach, aby najpierw zrobić pretty-print, a diff skupi się na faktycznych zmianach danych. Aby uzyskać w pełni strukturalne porównanie ignorujące kolejność kluczy, posortuj klucze po obu stronach przed porównywaniem.

Czy kolejność kluczy w obiekcie JSON ma znaczenie?

Dla kluczy obiektu nie — specyfikacja JSON mówi, że obiekty są nieuporządkowane, więc {"a":1,"b":2} i {"b":2,"a":1} reprezentują te same dane. Diff znakowy i tak oznaczy zmianę kolejności, dlatego przycisk Format jest ważny. Tablice są inne: [1,2,3] i [3,2,1] nie są równe, ponieważ kolejność tablicy ma znaczenie w JSON.

Dlaczego 0.1 + 0.2 nie równa się 0.3 w moim diffie?

Ze względu na zmiennoprzecinkowe IEEE 754. 0.1 + 0.2 to faktycznie 0.30000000000000004, a JSON.parse czyta liczby jako 64-bitowe floaty. Duże liczby całkowite trafiają na ten sam limit: wszystko powyżej 2^53 - 1 (9007199254740991) traci precyzję, więc snowflake ID w stylu Twittera nie wykona pełnej rundy. Jeśli precyzja ma znaczenie, przechowuj je jako stringi.

Czy mogę wkleić JSON z komentarzami lub przecinkami końcowymi?

Standardowy JSON nie pozwala na żadne z nich. { "a": 1, } lub // komentarz da Ci błąd parsowania. To JSON5 lub JSONC (format, którego VS Code używa dla settings.json), który jest nadzbiorem. Najpierw usuń komentarze i przecinki końcowe. Świadomie podążamy za ścisłą gramatyką RFC 8259, aby diff pasował do tego, co Twoje API faktycznie akceptuje.

Jak duży plik JSON mogę porównać, zanim zacznie zwalniać?

Do kilku MB jest ok, poniżej sekundy. Powyżej 10 MB przeglądarka zaczyna to czuć, głównie dlatego, że to renderowanie diffa (a nie obliczanie go) staje się kosztowne. Dla eksportów 50 MB+ przefiltruj obie strony do interesującego Cię poddrzewa za pomocą jq, a potem wklej to.

Czy to za darmo i czy muszę się rejestrować?

Za darmo tak, rejestracja nie. Nie ma konta, okresu próbnego ani limitu, ile razy porównujesz. Wklej dwa fragmenty JSON, a diff pojawia się od razu. Nic nie jest zablokowane za logowaniem, a przyciski Copy i Download dają Ci czysty wynik, bez znaku wodnego i bez wstrzykniętego formatowania.

Czym to się różni od innych narzędzi JSON diff online?

Porównanie działa w całości w Twojej przeglądarce, więc Twój JSON nigdy nie jest wysyłany — wiele stron JSON diff najpierw przesyła go na serwer, czego nie zrobisz z wewnętrzną odpowiedzią API ani configiem z sekretami. Podświetlanie jest na poziomie znaków, z czyszczeniem semantycznym, a nie całych wierszy, więc pojedyncza zmieniona wartość w obiekcie liczącym 200 wierszy od razu rzuca się w oczy. Jest też Format, Minify i walidacja na żywo.

Czy potrafi porównać dwa pliki JSON zamiast wklejonego tekstu?

Tak. Kliknij Upload w jednym z paneli i wybierz plik .json wprost z dysku — wczytaj swój stary package.json po lewej, a nowy po prawej bez kopiowania i wklejania. Plik jest czytany lokalnie w przeglądarce; nigdy nigdzie nie jest wysyłany. Naciśnij Format po obu stronach, a diff zignoruje białe znaki i pokaże tylko te wiersze zależności, które faktycznie się zmieniły.

Czy mogę porównać więcej niż dwa pliki JSON naraz?

Nie w jednym widoku. Jest zbudowane dla dwóch stron, oryginału i zmiany, bo właśnie tym jest diff. Jeśli masz trzy wersje configu, porównuj je parami — staging kontra prod, potem prod kontra proponowana zmiana. Każda para daje czysty, skupiony wynik zamiast widoku scalania trójstronnego, który ukrywa, który plik wprowadził dany klucz.

Czy bezpiecznie jest wkleić odpowiedź API z tokenami lub kluczami?

Tak. Parsowanie, formatowanie i diff dzieją się w całości na Twoim komputerze, a nic nie jest wysyłane, logowane ani przechowywane. Wklejony JWT, API key czy rekord klienta zostaje w karcie i znika, gdy ją zamkniesz. Aby to potwierdzić, otwórz DevTools, obserwuj kartę Network podczas porównywania, a zobaczysz zero żądań wychodzących z Twoimi danymi.

Czy ChatGPT potrafi porównać dwa pliki JSON?

Potrafi streścić, co się zmieniło między dwoma fragmentami JSON, i do szybkiego "co się tu przesunęło?" jest to naprawdę wygodne. Ale model językowy to nie parser. Może po cichu zmienić kolejność kluczy, przeoczyć wartość ukrytą głęboko w zagnieżdżonym obiekcie albo potknąć się na liczbach całkowitych powyżej 2^53, gdzie precyzja już i tak przepadła. No i wklejasz JSON, tokeny i wszystko inne, do usługi zewnętrznej. Żeby uzyskać dokładne porównanie na poziomie znaków, które nigdy nie opuszcza Twojej przeglądarki, przepuść to najpierw przez to narzędzie, a potem przekaż krótki wynik do ChatGPT i poproś o wyjaśnienie skutków prostym językiem.

Prywatność i jak to działa

Twój JSON nigdy nie opuszcza przeglądarki. Parser, formatter i diff działają na Twojej maszynie, lokalnie. Bez analityki Twoich danych wejściowych, bez logów, bez "pomocnej" rundy do chmury. Parsowanie używa natywnej JSON.parse przeglądarki, a specyfikacja JSON, której się trzymamy, to RFC 8259.