JSON Vergelijkingstool - Vergelijk JSON Online Gratis | JSON Verschil
Vergelijk JSON online gratis met onze snelle JSON vergelijkingstool. Vind verschillen direct met kleur gecodeerde resultaten. 100% veilig, browser-gebaseerde JSON diff. Geen registratie nodig.
JSON Verschil Gereedschap
Documentatie
Een JSON-vergelijkingstool, vaak een JSON-difftool genoemd, vergelijkt twee JSON-waarden (JavaScript Object Notation) en rapporteert wat ertussen is veranderd. De tool vermeldt elke toegevoegde, verwijderde of gewijzigde eigenschap of elk array-item, samen met de exacte locatie ervan in de gegevens. Deze pagina legt uit hoe de JSON-vergelijkingstool van whiz.tools werkt, met uitgewerkte voorbeelden op basis van de feitelijke vergelijkingslogica.
Wat is JSON vergelijken?
JSON vergelijken is het proces waarbij twee JSON-documenten met elkaar worden vergeleken om verschillen te vinden. Een JSON-document is een stuk tekst dat bestaat uit objecten (sleutel-waardeparen tussen accolades), arrays (geordende lijsten tussen vierkante haken) en primitieve waarden zoals tekenreeksen, getallen, booleaanse waarden en null. Twee van zulke documenten handmatig vergelijken is traag en foutgevoelig zodra ze langer worden dan enkele regels, dus een vergelijkingstool voert het koppelen automatisch uit en markeert elke wijziging.
Ontwikkelaars gebruiken dit soort vergelijkingen om API-antwoorden te controleren, wijzigingen in configuratiebestanden bij te houden, te verifiëren dat er tijdens een gegevensmigratie geen informatie verloren is gegaan en wijzigingen in JSON-bestanden in versiebeheer te beoordelen.
Hoe de tool twee JSON-waarden vergelijkt
De tool parseert beide invoeren met een standaard JSON-parser en doorloopt vervolgens de twee resulterende waarden samen, niveau voor niveau. Bij elke stap stelt de tool achtereenvolgens drie vragen:
- Hebben de twee waarden verschillende typen (bijvoorbeeld een object en een getal), of is de ene
nullterwijl de andere dat niet is? Zo ja, dan registreert de tool op die plek een wijziging en stopt het vergelijken op diepere niveaus. - Zijn beide waarden primitieve waarden (een tekenreeks, getal, booleaanse waarde of null)? Zo ja, dan worden ze rechtstreeks vergeleken. Elk verschil, inclusief een wijziging van het getal
123naar de tekenreeks"123", geldt als een wijziging. - Zijn beide waarden objecten of beide arrays? Zo ja, dan vergelijkt de tool de inhoud volgens de onderstaande regels en wordt elk genest object of elke geneste array recursief verwerkt.
Elk verschil wordt geregistreerd met een pad, zoals user.address.city of tags[1], zodat het gemakkelijk in het oorspronkelijke document kan worden gevonden. Objectleden worden met een punt verbonden en array-items worden weergegeven met hun index tussen vierkante haken. Een verschil helemaal bovenaan het document, zoals een array die door een object is vervangen, heeft geen pad binnen de gegevens en wordt daarom aangeduid met $. Dat is de rootidentificatie die is gedefinieerd door RFC 9535, de JSONPath-standaard, en staat voor het volledige document.
Objecten vergelijken
Voor twee JSON-objecten verzamelt de tool elke sleutel die in een van beide objecten voorkomt. Voor elke sleutel geldt:
- Als de sleutel alleen in het tweede object voorkomt, is dat een toegevoegde eigenschap.
- Als de sleutel alleen in het eerste object voorkomt, is dat een verwijderde eigenschap.
- Als de sleutel in beide voorkomt, vergelijkt de tool de twee waarden recursief.
De volgorde van sleutels is niet van belang. De JSON-standaard definieert geen volgorde voor objectleden, dus {"a":1,"b":2} en {"b":2,"a":1} worden als identiek beschouwd.
Arrays vergelijken
Arrays worden op positie en niet op inhoud vergeleken. De tool doorloopt beide arrays index voor index en vergelijkt wat er op elke index staat, tot aan de lengte van de langste array. Als een array korter is, worden de extra items aan het einde van de langste array als toegevoegd of verwijderd gerapporteerd.
Dit betekent dat de tool nooit probeert array-items op basis van hun inhoud aan elkaar te koppelen. De tool merkt niet dat een object van index 1 naar index 2 is "verplaatst"; hij ziet alleen dat de waarde op elke index is veranderd. Het verwijderen of invoegen van een item in het midden van een array verschuift elk volgend item één positie, waardoor dit meestal als meerdere afzonderlijke wijzigingen wordt weergegeven in plaats van als één duidelijke toevoeging of verwijdering.
Uitgewerkt voorbeeld
Voorbeeld 1: twee objecten vergelijken
Eerste JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Tweede JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Resultaat:
- Gewijzigd
user.address.city:"New York"→"Boston" - Gewijzigd
user.address.zip:"10001"→"02108"
Voorbeeld 2: een wijziging aan het einde van een array
Eerste JSON:
1{ "tags": ["important", "urgent", "review"] }
2Tweede JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Index 0 is ongewijzigd, index 1 is gewijzigd, index 2 is ongewijzigd en index 3 komt alleen in de tweede array voor. Resultaat:
- Gewijzigd
tags[1]:"urgent"→"critical" - Toegevoegd
tags[3]:"documentation"
Voorbeeld 3: een item uit het midden van een array verwijderen
Dit voorbeeld laat zien wat er gebeurt wanneer een item uit het midden van een array wordt verwijderd, omdat dit vaak tot verwarring leidt.
Eerste 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}
8Tweede JSON, met de invoer "Mouse" verwijderd en aan het einde een invoer "Monitor" toegevoegd:
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}
8Iemand die dit bekijkt, zou zeggen: "Mouse is verwijderd en Monitor is toegevoegd." Omdat de tool strikt op index vergelijkt, ziet hij het niet zo. Hij vergelijkt index 0 met index 0, index 1 met index 1 en index 2 met index 2, waardoor elk veld na het verwijderde item met het verkeerde object wordt vergeleken. Het werkelijke resultaat bestaat uit zeven wijzigingen:
- Gewijzigd
products[0].price:999.99→899.99 - Gewijzigd
products[1].id:2→3 - Gewijzigd
products[1].name:"Mouse"→"Keyboard" - Gewijzigd
products[1].price:24.99→59.99 - Gewijzigd
products[2].id:3→4 - Gewijzigd
products[2].name:"Keyboard"→"Monitor" - Gewijzigd
products[2].price:59.99→349.99
Voor een overzichtelijker resultaat bij het vergelijken van zulke lijsten kunnen beide arrays vóór het plakken op dezelfde manier worden gesorteerd of van sleutels worden voorzien, bijvoorbeeld door elke lijst in dezelfde volgorde te schrijven of objecten vóór de vergelijking aan een ID-veld te koppelen.
Wat de tool niet doet
- De tool koppelt array-items niet op basis van hun inhoud. Zoals hierboven is weergegeven, vergelijkt hij uitsluitend op indexpositie en kan hij dus niet herkennen dat een item is verplaatst in plaats van gewijzigd.
- De tool detecteert geen circulaire verwijzingen. In de praktijk vormt dit geen beperking: beide invoeren komen uit
JSON.parse, dat altijd een gewone boomstructuur opbouwt en nooit een waarde kan produceren die naar zichzelf verwijst. Circulaire verwijzingen kunnen überhaupt niet voorkomen in geldige JSON-tekst. - De tool biedt geen instelling om arrays vóór het vergelijken te sorteren. De items in de invoer vóór het plakken herschikken is de enige manier om het hierboven beschreven indexverschuivingseffect te voorkomen.
De tool gebruiken
- Plak het eerste JSON-document in het linkervak en het tweede in het rechtervak.
- De tool vergelijkt ze automatisch zodra beide vakken tekst bevatten, of klik op Compare om de vergelijking handmatig uit te voeren.
- Bekijk de resultatenlijst. Elke regel toont een pad, zoals
user.age, en of het item is toegevoegd, verwijderd of gewijzigd, waarbij de oude en nieuwe waarden naast elkaar worden weergegeven. - Klik op Copy om de resultaten als platte tekst te kopiëren.
Als een vak tekst bevat die geen geldige JSON is, toont de tool onder dat vak een foutmelding in plaats van een vergelijking. Als beide vakken ongeldig zijn, verschijnen beide foutmeldingen tegelijk.
Veelgestelde vragen
Wat geldt als een verschil tussen twee JSON-waarden?
Een eigenschap of een array-item verschilt als het in slechts één van de twee documenten voorkomt, of als het in beide voorkomt maar een andere waarde of een ander type heeft. Een waarde wijzigen van het getal 5 naar de tekenreeks "5" geldt als een wijziging, ook al kunnen ze er hetzelfde uitzien.
Is de volgorde van items van belang? Dat hangt af van de container. JSON-objecten hebben geen vastgelegde volgorde van leden, dus twee objecten met dezelfde sleutels en waarden in een andere volgorde worden als identiek beschouwd. Arrays zijn geordend en de tool vergelijkt ze op indexpositie, waardoor het verplaatsen van een item naar een andere positie als een reeks wijzigingen wordt gerapporteerd en niet als een verplaatsing.
Wat betekent een resultaatpad van $?
Het betekent dat het volledige document is gewijzigd, niet slechts één onderdeel. Dit gebeurt wanneer de twee invoeren bovenaan verschillende typen waarden hebben, bijvoorbeeld een array aan de ene kant en een object aan de andere, of de gewone getallen 1 en 2. $ is de rootidentificatie uit RFC 9535, de JSONPath-standaard.
Worden mijn JSON-gegevens naar een server verzonden? Nee. De vergelijking wordt in de browser uitgevoerd met JavaScript. Er wordt niets geüpload.
Heeft opmaak, zoals inspringing of minificatie, invloed op het resultaat? Nee. Beide invoeren worden vóór de vergelijking geparseerd naar JSON-waarden, dus witruimte, inspringing en regeleinden maken geen verschil. Alleen de feitelijke gegevens worden vergeleken.
Kan de tool JSON met opmerkingen of afsluitende komma's vergelijken? Nee. Standaard-JSON, zoals gedefinieerd in RFC 8259, staat geen opmerkingen of afsluitende komma's toe. Invoer die deze bevat, wordt als ongeldig afgewezen.
Referenties
- IETF. "The JavaScript Object Notation (JSON) Data Interchange Format." RFC 8259, december 2017.
- IETF. "JavaScript Object Notation (JSON) Patch." RFC 6902, april 2013.
- IETF. "JSONPath: Query Expressions for JSON." RFC 9535, februari 2024. (Sectie 2,2 definieert de rootidentificatie
$.) - Mozilla-ontwikkelaarsnetwerk. ‘JSON.parse()’.