tigtools

JSON Diff

Plak twee JSON-documenten om precies te zien welke waarden verschillen, weergegeven per pad zoals $.order.items[2].price.

Werkt in je browser Geen registratie nodig

Arrays vergelijken
Weergeven

Zo gebruik je deze tool

  1. Plak de oorspronkelijke JSON links en de gewijzigde JSON rechts, of probeer het voorbeeld.
  2. Kies hoe arrays worden vergeleken: op positie, of door items te koppelen zodat een ingevoegd item één keer wordt gemeld.
  3. Bekijk de verschillen als lijst of naast elkaar. Elk verschil heeft een pad vanaf de root ($).
  4. Kopieer het rapport om het in een ticket of codereview te plakken.

Hoe het werkt

Beide documenten worden geparseerd en als data vergeleken, niet als tekst. Objecten worden sleutel voor sleutel vergeleken, dus de volgorde van sleutels en de witruimte of inspringing doen er niet toe. Getallen worden op waarde vergeleken, dus 1 en 1.0 zijn gelijk.

Elk verschil heeft een pad dat is geschreven als een JSONPath-expressie: $ is de root, .name is een eigenschap, [2] is een array-index en sleutels die geen eenvoudige namen zijn, worden tussen aanhalingstekens gezet, zoals in $["first-name"]. Er worden vier soorten verschillen gemeld: toegevoegd (alleen rechts), verwijderd (alleen links), gewijzigd (zelfde type, andere waarde) en type gewijzigd (bijvoorbeeld het getal 44.9 werd de tekenreeks "44.90", of een waarde werd null). Wanneer een heel object of een hele array wordt toegevoegd of verwijderd, wordt dit één keer op het eigen pad gemeld en niet per veld.

Standaard worden arrays op positie vergeleken: item 0 met item 0, item 1 met item 1. Als er aan het begin een item wordt ingevoegd, lijkt elk later item daarna gewijzigd. “Verplaatste items matchen” lijnt de twee arrays eerst uit met een langste gemeenschappelijke deelreeks van gelijke items, zodat een invoeging of verwijdering slechts één keer wordt gemeld en de resterende items aan elkaar worden gekoppeld. Toegevoegde items gebruiken hun index rechts, verwijderde items hun index links. Het matchen wordt overgeslagen voor zeer grote arrays (meer dan ongeveer 2 miljoen itemparen), die dan op positie worden vergeleken.

De sleutelpaden in de lijst worden binnen elk object alfabetisch gesorteerd. Er worden maximaal 2.000 verschillen weergegeven; het gekopieerde rapport bevat altijd alle verschillen.

Voorbeelden

Een API-wijziging controleren

Vergelijk de respons van gisteren en vandaag voor dezelfde bestelling. De diff toont dat $.status is gewijzigd van "pending" naar "shipped", $.total van type is veranderd van getal naar tekenreeks, $.coupon is verwijderd en $.customer.phone is toegevoegd.

Configuratiedrift

Plak de JSON-configuratie uit staging en productie. Omdat de sleutelvolgorde wordt genegeerd, verschijnen alleen echte verschillen zoals $.cache.ttl 300 → 60, zelfs als de bestanden door verschillende tools zijn opgeslagen.

Lijsten met een ingevoegd item

Een productlijst kreeg een nieuw eerste item. Op positie lijkt elk product gewijzigd; met “Verplaatste items koppelen” is het resultaat slechts één “Toegevoegd $[0]”.

Veelgestelde vragen

Hoe verschilt dit van een tekst-diff?

Een tekst-diff vergelijkt regels, dus het herordenen van sleutels of opnieuw formatteren verschijnt als een wijziging. Deze tool vergelijkt de geparseerde gegevens, dus alleen verschillen in waarden, typen en structuur worden gemeld.

Waarom laat een array na één invoeging veel wijzigingen zien?

In de modus “Op positie” worden items met dezelfde index vergeleken en een invoeging verschuift elk volgend item. Schakel over naar “Verplaatste items koppelen” om gelijke items eerst te koppelen.

Worden “1” en 1 als gelijk behandeld?

Nee. De ene is een string en de andere een getal, dus het verschil wordt gemeld als een typewijziging. Waarden met hetzelfde type worden exact vergeleken.

Kan ik zeer grote bestanden vergelijken?

Bestanden van enkele megabytes werken, maar alles wordt verwerkt in het geheugen van je browser, dus zeer grote documenten kunnen op telefoons traag zijn.

Privacy

Beide documenten worden alleen in je browser geparseerd en vergeleken. Er wordt niets geüpload, opgeslagen of opgenomen in analytics.