Slik bruker du det
- Lim inn den opprinnelige JSON-en til venstre og den endrede JSON-en til høyre, eller prøv eksempelet.
- Velg hvordan matriser sammenlignes: etter posisjon, eller ved å matche elementer slik at et innsatt element rapporteres én gang.
- Les forskjellene som en liste eller side om side. Hver forskjell har en bane fra roten ($).
- Kopier rapporten for å lime den inn i en sak eller kodegjennomgang.
Slik fungerer det
Begge dokumentene blir analysert og sammenlignet som data, ikke som tekst. Objekter sammenlignes nøkkel for nøkkel, slik at rekkefølgen på nøklene og mellomrom eller innrykk ikke spiller noen rolle. Tall sammenlignes etter verdi, så 1 og 1.0 er like.
Hver forskjell har en bane skrevet som et JSONPath-uttrykk: $ er roten, .name er en egenskap, [2] er en arrayindeks, og nøkler som ikke er enkle navn settes i anførselstegn, som i $["first-name"]. Fire typer forskjeller rapporteres: lagt til (bare på høyre side), fjernet (bare på venstre side), endret (samme type, annen verdi) og type endret (for eksempel at tallet 44.9 ble strengen «44.90», eller at en verdi ble null). Når et helt objekt eller en hel array legges til eller fjernes, rapporteres det én gang på sin egen bane i stedet for én gang per felt.
Arrayer sammenlignes som standard etter posisjon: element 0 med element 0, element 1 med element 1. Hvis et element settes inn i starten, ser alle senere elementer ut til å være endret. «Match flyttede elementer» justerer først de to arrayene ved hjelp av en lengste felles delfølge av like elementer, slik at en innsetting eller sletting bare rapporteres én gang og de resterende elementene pares. Elementer som er lagt til, bruker indeksen sin på høyre side, og elementer som er fjernet, bruker indeksen sin på venstre side. Matching hoppes over for svært store arrayer (over omtrent 2 millioner elementpar), som da sammenlignes etter posisjon.
Nøkkelbanene i listen sorteres alfabetisk innenfor hvert objekt. Opptil 2 000 forskjeller vises; den kopierte rapporten inneholder alltid alle forskjellene.
Eksempler
Kontrollere en API-endring
Sammenlign gårsdagens og dagens respons for samme ordre. Diffen viser at $.status ble endret fra «pending» til «shipped», at $.total endret type fra tall til streng, at $.coupon ble fjernet og at $.customer.phone ble lagt til.
Konfigurasjonsdrift
Lim inn JSON-konfigurasjonen fra staging og produksjon. Fordi rekkefølgen på nøkler ignoreres, vises bare reelle forskjeller som $.cache.ttl 300 → 60, selv om filene ble lagret av forskjellige verktøy.
Lister med et innsatt element
En produktliste fikk et nytt første element. Etter posisjon ser alle produkter ut til å være endret; med «Match flyttede elementer» blir resultatet én enkelt «Lagt til $[0]».
Ofte stilte spørsmål
Hvordan skiller dette seg fra en tekstdiff?
En tekstdiff sammenligner linjer, så endring av rekkefølgen på nøkler eller omformatering vises som endringer. Dette verktøyet sammenligner de analyserte dataene, så bare forskjeller i verdier, typer og struktur rapporteres.
Hvorfor viser en matrise mange endringer etter én innsetting?
I «Etter posisjon»-modus sammenlignes elementer på samme indeks, og en innsetting forskyver alle senere elementer. Bytt til «Match flyttede elementer» for å justere like elementer først.
Behandles "1" og 1 som like?
Nei. Den ene er en streng og den andre et tall, så forskjellen rapporteres som en typeendring. Verdier med samme type sammenlignes nøyaktig.
Kan jeg sammenligne svært store filer?
Filer på noen få megabyte fungerer, men alt behandles i nettleserens minne, så svært store dokumenter kan være trege på telefoner.
Personvern
Begge dokumentene analyseres og sammenlignes bare i nettleseren din. Ingenting lastes opp, lagres eller inngår i analyseverktøy.