tigtools

JSON Diff

Indsæt to JSON-dokumenter for at se præcis, hvilke værdier der adskiller sig, listet efter sti som $.order.items[2].price.

Kører i din browser Ingen tilmelding

Sammenlign arrays
Vis

Sådan bruger du det

  1. Indsæt det originale JSON til venstre og det ændrede JSON til højre, eller prøv eksemplet.
  2. Vælg, hvordan arrays sammenlignes: efter position eller ved at matche elementer, så et indsat element kun rapporteres én gang.
  3. Læs forskellene som en liste eller side om side. Hver forskel har en sti fra roden ($).
  4. Kopier rapporten for at indsætte den i en ticket eller et code review.

Sådan fungerer det

Begge dokumenter parses og sammenlignes som data, ikke som tekst. Objekter sammenlignes nøgle for nøgle, så rækkefølgen af nøgler og mellemrum eller indrykning ikke betyder noget. Tal sammenlignes efter værdi, så 1 og 1.0 er ens.

Hver forskel har en sti skrevet som et JSONPath-udtryk: $ er roden, .name er en egenskab, [2] er et arrayindeks, og nøgler der ikke er simple navne sættes i anførselstegn, som i $["first-name"]. Fire typer forskelle rapporteres: tilføjet (kun til højre), fjernet (kun til venstre), ændret (samme type, anden værdi) og type ændret (for eksempel tallet 44.9 blev til strengen "44.90", eller en værdi blev til null). Når et helt objekt eller array tilføjes eller fjernes, rapporteres det én gang på sin egen sti i stedet for én gang pr. felt.

Arrays sammenlignes som standard efter position: element 0 med element 0, element 1 med element 1. Hvis et element indsættes i starten, ser alle senere elementer derefter ud som ændret. "Match flyttede elementer" justerer først de to arrays ved hjælp af en længste fælles delsekvens af ens elementer, så en indsættelse eller sletning kun rapporteres én gang, og de resterende elementer parres. Tilføjede elementer bruger deres indeks til højre, fjernede elementer deres indeks til venstre. Matching springes over for meget store arrays (over ca. 2 millioner elementpar), som derefter sammenlignes efter position.

Nøglestier i listen sorteres alfabetisk inden for hvert objekt. Op til 2.000 forskelle vises; den kopierede rapport indeholder altid dem alle.

Eksempler

Tjek af en API-ændring

Sammenlign gårsdagens og dagens svar for samme ordre. Diffen viser, at $.status er ændret fra "pending" til "shipped", at $.total har ændret type fra tal til streng, at $.coupon er fjernet, og at $.customer.phone er tilføjet.

Konfigurationsdrift

Indsæt JSON-konfigurationen fra staging og fra produktion. Da nøglernes rækkefølge ignoreres, vises kun reelle forskelle som $.cache.ttl 300 → 60, selv hvis filerne er gemt af forskellige værktøjer.

Lister med et indsat element

En produktliste fik et nyt første element. Ved sammenligning efter position ser alle produkter ud til at være ændret; med "Match flyttede elementer" bliver resultatet en enkelt "Tilføjet $[0]".

Ofte stillede spørgsmål

Hvordan adskiller dette sig fra en tekstdiff?

En tekstdiff sammenligner linjer, så ændring af nøglernes rækkefølge eller omformatering vises som ændringer. Dette værktøj sammenligner de parsede data, så der kun rapporteres forskelle i værdier, typer og struktur.

Hvorfor viser et array mange ændringer efter én indsættelse?

I tilstanden “Efter position” sammenlignes elementer på samme indeks, og en indsættelse forskyder alle efterfølgende elementer. Skift til “Match flyttede elementer” for at matche ens elementer først.

Behandles "1" og 1 som ens?

Nej. Den ene er en streng, og den anden er et tal, så forskellen rapporteres som en typeændring. Værdier af samme type sammenlignes nøjagtigt.

Kan jeg sammenligne meget store filer?

Filer på nogle få megabyte fungerer, men alt behandles i din browsers hukommelse, så meget store dokumenter kan være langsomme på telefoner.

Privatliv

Begge dokumenter parses og sammenlignes kun i din browser. Intet uploades, gemmes eller indgår i statistik.