Plak twee JSON-documenten en lees de lijst met verschillen. /users/0/name is gewijzigd, /email is toegevoegd, /role is verwijderd: elke regel noemt de exacte plek, zodat je niet met je ogen twee muren van accolades hoeft af te zoeken. Deze JSON-diff vergelijkt de verwerkte gegevens, niet de tekst. Inspringing en volgorde van sleutels verschijnen nooit als wijzigingen.
Een JSON-diff lezen: pad, soort, oude en nieuwe waarde
Elk verschil heeft vier delen. Het pad is een JSON Pointer zoals gedefinieerd in RFC 6901: /users/0/name is de sleutel name van het eerste item in users. Een sleutel met een schuine streep wordt geschreven met ~1, een sleutel met een tilde met ~0. De soort is toegevoegd, verwijderd, gewijzigd of type gewijzigd. Elke soort heeft zijn eigen kleur, een symbool (+, -, ~, !) en een tekstlabel, zodat de lijst ook zonder kleurenzicht werkt. Daarna komen de oude en de nieuwe waarde.
Een samenvattingsregel telt de soorten. Als beide kanten dezelfde gegevens bevatten, zie je in plaats daarvan "Geen verschillen".
Waarden langer dan 200 tekens worden afgekapt, met een opmerking die vertelt hoeveel tekens verborgen zijn. De knop "Volledige waarde tonen" vouwt de waarde ter plekke uit.
Twee API-antwoorden stap voor stap vergelijken
- Plak het origineel in het linkervak en de gewijzigde versie in het rechtervak. Beide vakken beginnen met een voorbeeld, zodat je een resultaat ziet voordat je typt.
- Wacht even. De tool vergelijkt 200 ms na je laatste toetsaanslag. Als een kant geen geldige JSON is, noemt de melding de kant, de regel en de kolom.
- Druk op Beide opmaken om geldige invoer netjes op te maken, of op Zijden omwisselen als je de bestanden verkeerd om hebt geplakt.
- Zet Volgorde van arrays negeren aan als de volgorde van lijstitems voor jou niet uitmaakt.
- Druk op Diff als tekst kopiëren voor één regel per verschil, of op Kopiëren als JSON Patch voor een patch die een programma kan toepassen.
Sleutelvolgorde, arrayvolgorde en gelijkheid van getallen
Objecten worden op sleutel vergeleken, dus {"a":1,"b":2} is gelijk aan {"b":2,"a":1}. Arrays worden op index vergeleken: [1,2,3] tegenover [3,2,1] geeft twee wijzigingen, omdat het middelste item hetzelfde is.
Met Volgorde van arrays negeren bouwt de tool voor elk element een canonieke tekst met gesorteerde sleutels en koppelt gelijke elementen als multiset. Arrays die in elementen genest zijn, worden ook zonder volgorde vergeleken. De prijs: een element dat van binnen is gewijzigd, verschijnt als één verwijderd en één toegevoegd item, niet als wijziging binnen het item.
Getallen worden op waarde vergeleken, dus 1 en 1.0 zijn gelijk. Een sleutel met null is niet hetzelfde als een ontbrekende sleutel. Een leeg object tegenover een lege array is een typewijziging, en 1 tegenover "1" ook. Strings worden exact vergeleken, inclusief hoofdletters en spaties.
Het verschil kopiëren als RFC 6902 JSON Patch
De patch zet het linkerdocument om in het rechter met add-, remove- en replace-bewerkingen. Arrayitems worden van de hoogste index naar beneden verwijderd en van de laagste index omhoog toegevoegd, zodat de bewerkingen in de gegeven volgorde werken. Er is geen move- of copy-bewerking. In de modus met genegeerde volgorde is de knop uitgeschakeld, omdat een patch arrayitems op positie aanwijst.
Waar je JSON naartoe gaat en wat hij niet kan lezen
Parsen en vergelijken draaien in je browser met JSON.parse. De tool verstuurt geen verzoek en slaat niets op; het netwerkpaneel van je browser laat dat zien. Het klembord wordt alleen gebruikt als je op een kopieerknop drukt.
Elke kant mag 2.000.000 tekens hebben. Grotere invoer wordt met een melding geweigerd. Getallen boven 2^53 verliezen precisie: 9007199254740993 wordt gelezen als 9007199254740992, dus twee verschillende enorme gehele getallen kunnen gelijk lijken. Als een sleutel twee keer in de tekst voorkomt, wint de laatste waarde. Opmerkingen en komma's aan het eind zijn geen JSON, en de fout toont hun regel en kolom. De lijst toont de eerste 1.000 verschillen; de kopieerknoppen gebruiken ze allemaal. Een byteordermarkering aan het begin wordt vóór het parsen verwijderd.