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.

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.