JSON Sammenligningsverktøy - Sammenlign JSON på nett gratis | JSON Diff
Sammenlign JSON på nett gratis med vårt raske JSON-sammenligningsverktøy. Finn forskjeller umiddelbart med fargekodet resultat. 100% sikkert, nettleserbasert JSON diff. Ingen påmelding nødvendig.
JSON Forskjells Verktøy
Dokumentasjon
Et JSON-sammenligningsverktøy, ofte kalt et JSON-diffverktøy, sammenligner to JSON-verdier (JavaScript Object Notation) og rapporterer hva som er endret mellom dem. Det viser hver egenskap eller hvert matriseelement som er lagt til, fjernet eller endret, sammen med den nøyaktige plasseringen i dataene. Denne siden forklarer hvordan JSON-sammenligningsverktøyet på whiz.tools fungerer, med gjennomarbeidede eksempler basert på den faktiske sammenligningslogikken.
Hva er JSON-sammenligning?
JSON-sammenligning er prosessen med å kontrollere to JSON-dokumenter mot hverandre for å finne forskjeller. Et JSON-dokument er et tekststykke bygget opp av objekter (nøkkel-verdi-par i krøllparenteser), matriser (ordnede lister i hakeparenteser) og primitive verdier som strenger, tall, boolske verdier og null. Det går sakte og er feilutsatt å sammenligne to slike dokumenter visuelt når de blir lengre enn noen få linjer, så et sammenligningsverktøy utfører samsvaringen automatisk og fremhever hver endring.
Utviklere bruker denne typen sammenligning til å kontrollere API-svar, spore endringer i konfigurasjonsfiler, bekrefte at en datamigrering ikke har mistet informasjon, og gjennomgå endringer i JSON-filer i versjonskontroll.
Hvordan verktøyet sammenligner to JSON-verdier
Verktøyet analyserer begge inndataene med en standard JSON-parser og går deretter gjennom de to resulterende verdiene sammen, ett nivå om gangen. Ved hvert trinn stiller det tre spørsmål, i denne rekkefølgen:
- Har de to verdiene ulike typer (for eksempel at den ene er et objekt og den andre et tall), eller er den ene
nullmens den andre ikke er det? I så fall registrerer det en endring på dette stedet og slutter å sammenligne lenger ned. - Er begge verdiene primitive (en streng, et tall, en boolsk verdi eller null)? I så fall sammenligner det dem direkte. Enhver forskjell, inkludert en endring fra tallet
123til strengen"123", regnes som en endring. - Er begge verdiene objekter eller begge matriser? I så fall sammenligner det innholdet etter reglene nedenfor og går rekursivt inn i eventuelle nøstede objekter eller matriser.
Hver forskjell registreres med en sti, for eksempel user.address.city eller tags[1], slik at den er enkel å finne i originaldokumentet. Objektmedlemmer kobles sammen med punktum, og matriseelementer vises med indeksen sin i hakeparenteser. En forskjell helt øverst i dokumentet, for eksempel at en matrise erstattes av et objekt, har ingen sti inne i dataene og merkes derfor $. Dette er rotidentifikatoren som er definert av RFC 9535, JSONPath-standarden, og den står for hele dokumentet.
Sammenligning av objekter
For to JSON-objekter samler verktøyet alle nøkler som finnes i minst ett av objektene. For hver nøkkel:
- Hvis nøkkelen bare finnes i det andre objektet, er det en lagt til egenskap.
- Hvis nøkkelen bare finnes i det første objektet, er det en fjernet egenskap.
- Hvis nøkkelen finnes i begge, sammenligner verktøyet de to verdiene rekursivt.
Rekkefølgen på nøklene har ingen betydning. JSON-standarden definerer ikke en rekkefølge for objektmedlemmer, så {"a":1,"b":2} og {"b":2,"a":1} behandles som identiske.
Sammenligning av matriser
Matriser sammenlignes etter posisjon, ikke etter innhold. Verktøyet går gjennom begge matrisene indeks for indeks og sammenligner det som står på hver indeks, opptil lengden på den lengste matrisen. Hvis den ene matrisen er kortere, rapporteres de ekstra elementene på slutten av den lengste matrisen som lagt til eller fjernet.
Det betyr at verktøyet aldri forsøker å matche matriseelementer basert på innholdet. Det oppdager ikke at et objekt er «flyttet» fra indeks 1 til indeks 2; det ser bare at verdien på hver indeks er endret. Hvis et element slettes eller settes inn midt i en matrise, forskyves alle etterfølgende elementer med én posisjon. Derfor vises det vanligvis som flere separate endringer i stedet for én tydelig tilføyelse eller fjerning.
Regneeksempel
Eksempel 1: sammenligning av to objekter
Første JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Andre JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Resultat:
- Endret
user.address.city:"New York"→"Boston" - Endret
user.address.zip:"10001"→"02108"
Eksempel 2: en matriseendring på slutten
Første JSON:
1{ "tags": ["important", "urgent", "review"] }
2Andre JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Indeks 0 er uendret, indeks 1 er endret, indeks 2 er uendret, og indeks 3 finnes bare i den andre matrisen. Resultat:
- Endret
tags[1]:"urgent"→"critical" - Lagt til
tags[3]:"documentation"
Eksempel 3: fjerning av et element fra midten av en matrise
Dette eksempelet viser hva som skjer når et element fjernes fra midten av en matrise, fordi det er en vanlig kilde til forvirring.
Første JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Andre JSON, med oppføringen «Mouse» slettet og oppføringen «Monitor» lagt til på slutten:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8En person som ser på dette, ville sagt «Mouse ble fjernet, og Monitor ble lagt til.» Fordi verktøyet sammenligner strengt etter indeks, ser det ikke saken slik. Det sammenligner indeks 0 med indeks 0, indeks 1 med indeks 1 og indeks 2 med indeks 2, slik at hvert felt etter det slettede elementet samsvarer med feil objekt. Det faktiske resultatet er sju endringer:
- Endret
products[0].price:999.99→899.99 - Endret
products[1].id:2→3 - Endret
products[1].name:"Mouse"→"Keyboard" - Endret
products[1].price:24.99→59.99 - Endret
products[2].id:3→4 - Endret
products[2].name:"Keyboard"→"Monitor" - Endret
products[2].price:59.99→349.99
For å få et ryddigere resultat når slike lister sammenlignes, bør begge matrisene sorteres eller organiseres etter en nøkkel på samme måte før de limes inn, for eksempel ved å skrive hver liste i samme rekkefølge eller samsvare objekter etter et ID-felt før sammenligningen.
Dette gjør ikke verktøyet
- Det samsvarer ikke matriseelementer etter innhold. Som vist ovenfor sammenligner det utelukkende etter indeksposisjon, så det kan ikke gjenkjenne at et element er flyttet i stedet for endret.
- Det oppdager ikke sirkulære referanser. Dette er ikke en praktisk begrensning: Begge inndataene kommer fra
JSON.parse, som alltid bygger et vanlig tre og aldri kan produsere en verdi som viser tilbake til seg selv. Sirkulære referanser kan ikke finnes i gyldig JSON-tekst i utgangspunktet. - Det tilbyr ikke en innstilling for å sortere matriser før sammenligning. Å omorganisere elementene i inndataene før de limes inn, er den eneste måten å unngå indeksskyvningen som er beskrevet ovenfor.
Slik bruker du verktøyet
- Lim det første JSON-dokumentet inn i boksen til venstre og det andre inn i boksen til høyre.
- Verktøyet sammenligner dem automatisk når begge boksene inneholder tekst, eller ved å klikke på Compare for å kjøre sammenligningen manuelt.
- Les resultatlisten. Hver linje viser en sti, for eksempel
user.age, og om den ble lagt til, fjernet eller endret, med de gamle og nye verdiene vist side ved side. - Klikk på Copy for å kopiere resultatene som ren tekst.
Hvis en boks inneholder tekst som ikke er gyldig JSON, viser verktøyet en feil under boksen i stedet for en sammenligning. Når begge boksene er ugyldige, vises begge feilene samtidig.
Ofte stilte spørsmål
Hva regnes som en forskjell mellom to JSON-verdier?
En egenskap eller et matriseelement er forskjellig hvis det finnes i bare ett av de to dokumentene, eller hvis det finnes i begge, men har en annen verdi eller en annen type. Å endre en verdi fra tallet 5 til strengen "5" regnes som en endring, selv om de kan se like ut.
Har rekkefølgen på elementene betydning? Det avhenger av beholderen. JSON-objekter har ingen definert rekkefølge for medlemmer, så to objekter med de samme nøklene og verdiene i ulik rekkefølge behandles som identiske. Matriser er ordnet, og verktøyet sammenligner dem etter indeksposisjon. Derfor rapporteres det å flytte et element til en annen posisjon som en rekke endringer, ikke som en flytting.
Hva betyr en resultatsti på $?
Det betyr at hele dokumentet er endret, ikke bare en del av det. Dette skjer når de to inndataene er ulike typer verdier på øverste nivå, for eksempel en matrise på den ene siden og et objekt på den andre, eller tallene 1 og 2. $ er rotidentifikatoren fra RFC 9535, JSONPath-standarden.
Sendes JSON-dataene mine til en server? Nei. Sammenligningen kjøres i nettleseren ved hjelp av JavaScript. Ingenting lastes opp.
Påvirker formatering, for eksempel innrykk eller minifisering, resultatet? Nei. Begge inndataene analyseres til JSON-verdier før sammenligningen, så mellomrom, innrykk og linjeskift har ingen betydning. Bare selve dataene sammenlignes.
Kan verktøyet sammenligne JSON med kommentarer eller avsluttende kommaer? Nei. Standard JSON, slik det er definert i RFC 8259, tillater ikke kommentarer eller avsluttende kommaer. Inndata som inneholder dette, avvises som ugyldige.
Referanser
- IETF. «The JavaScript Object Notation (JSON) Data Interchange Format.» RFC 8259, desember 2017.
- IETF. «JavaScript Object Notation (JSON) Patch.» RFC 6902, april 2013.
- IETF. «JSONPath: Query Expressions for JSON.» RFC 9535, februar 2024. (Avsnitt 2,2 definerer rotidentifikatoren
$.) - Mozilla Developer Network. «JSON.parse().»