JSON Diff (Confronta)
Confronta due file JSON istantaneamente nel browser. Evidenziazione affiancata, output JSON Patch RFC 6902, ignora campi rumorosi come timestamp e ID. 100% privato, nessun upload.
Opzioni avanzate
Cos'è JSON Diff?
JSON Diff è un confronto strutturale di due documenti JSON che rispetta il modello dei dati JSON — le key non sono ordinate, i tipi sono strict e gli array possono essere ordinati o con key. A differenza di un diff testuale (che confronta le righe e segnala riordini di key o spazi come differenze), un JSON diff produce risultati semanticamente significativi.
La forma canonica leggibile dalla macchina è JSON Patch (RFC 6902), un array ordinato di operazioni (add, remove, replace, move, copy, test) che trasforma un documento nell'altro. I percorsi usano JSON Pointer (RFC 6901). Strettamente correlato: JSON Merge Patch (RFC 7396) — più semplice ma non può distinguere 'rimuovi key' da 'imposta key a null'. Questo tool produce output RFC 6902.
L'uguaglianza profonda su JSON in JavaScript è più difficile di quanto sembri. JSON.stringify(a) === JSON.stringify(b) fallisce con riordini di key, e inganna su -0 vs 0 (entrambi vengono serializzati come "0"). Un diff corretto deve percorrere entrambi gli alberi in parallelo usando l'unione degli insiemi di key, distinguere null da mancante tramite l'operatore 'in', e decidere cosa significa 'uguale' per i numeri (Object.is per default, epsilon per la tolleranza).
Questo tool viene eseguito interamente nel browser. Gli input non lasciano mai la tua macchina. Sicuro per risposte API, schemi interni e configurazioni proprietarie.
Hai bisogno di tool JSON correlati? Formatta con JSON Formatter; converti con JSON to YAML e YAML to JSON.
// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';
// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)
// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences
// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }] Funzionalità principali
Affiancato + JSON Patch
Due viste da un unico diff: evidenziazione visiva per la revisione, patch RFC 6902 per l'automazione.
Ignora i campi rumorosi
I preset con un clic escludono /createdAt, /updatedAt, /*Id, /*At, requestId, traceId. Supportati pattern Extended JSON Pointer personalizzati.
Corrispondenza array per key
Confronta array di oggetti tramite un campo id anziché per indice — per env K8s, voci di package-lock o qualsiasi lista logicamente non ordinata.
Type-Strict per impostazione predefinita
1 ≠ "1". null ≠ mancante. Rileva la deriva della serializzazione del backend nel momento in cui compare in un test fixture.
100% basato sul browser
Gli input non lasciano mai la tua macchina. Nessun upload, nessun localStorage del JSON, nessuna analisi di ciò che incolli.
Condividi la configurazione, non i dati
Share Link scrive solo la tua configurazione nell'URL. I tuoi input JSON rimangono locali.
Esempi
Regressione risposta API
{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}} {"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}} Due modifiche (name + createdAt). Aggiungi /user/createdAt a Ignora percorsi e rimane solo la modifica del nome.
Audit file di configurazione (riordino key)
{"a":1,"b":2,"c":3} {"c":3,"a":1,"b":2} Stessi dati, ordine delle key diverso. JSON Diff tratta l'ordine delle key come semanticamente irrilevante — il diff è vuoto.
Array di oggetti (corrispondenza per key)
[{"id":1,"qty":3},{"id":2,"qty":5}] [{"id":2,"qty":5},{"id":1,"qty":4}] Passa la modalità Array a 'Corrispondenza per key' con key=id. Senza allineamento ogni elemento appare modificato; con allineamento cambia solo qty sull'id=1.
Output JSON Patch (RFC 6902)
{"items":[{"id":1,"price":29.99}]} {"items":[{"id":1,"price":24.99}]} Passa al tab JSON Patch per ottenere [{"op":"replace","path":"/items/0/price","value":24.99}] applicabile con fast-json-patch.
Come si usa
- 1
Incolla entrambi i documenti JSON
Incolla il JSON originale (sinistra) e modificato (destra). Il diff live viene visualizzato mentre scrivi; input grandi (>200 KB) passano a un pulsante Diff manuale.
- 2
Filtra il rumore
Clicca un preset (Timestamps / IDs / Trace) o incolla pattern Extended JSON Pointer in Ignora percorsi per escludere i campi irrilevanti.
- 3
Scegli la vista di cui hai bisogno
Affiancata per la revisione umana, JSON Patch (RFC 6902) per operazioni applicabili dalla macchina. Usa Share Link per inviare la configurazione a un collega.
Errori comuni nel diff
Rumore nell'ordine delle key (sintomo del diff testuale)
Se il tuo tool di diff segnala {"a":1,"b":2} vs {"b":2,"a":1} come diversi, sta facendo un diff a riga, non un JSON diff. Le key JSON non sono ordinate — questo tool ignora automaticamente l'ordine delle key.
diff a.json b.json # text diff: 'everything changed'
JSON Diff (this tool): 0 differences
Confusione null vs mancante
{"a":null} e {} non sono la stessa cosa. Trattarli come uguali maschera veri bug del backend.
{"a": null} == {} # collapsed by some tools {"a": null} ≠ {} # type-strict diff Ordine array senza allineamento per key
[{id:1},{id:2}] vs [{id:2},{id:1}] non sono 'due modifiche' per un insieme logico. Il sequenziale lo segnala come tale; passa a Corrispondenza per key.
Sequential diff: 4 modified
Match by key (id): 0 differences
Deriva di tipo (Number vs String)
I backend a volte serializzano gli ID in modo incoerente — 42 vs "42". Il tool segnala questi come modifiche di 'tipo' così puoi individuare la deriva tempestivamente.
{"id": 42} vs {"id": "42"} # serialization bug Diff reports 'modified (type)' with both values
Precisione floating-point
0.1 + 0.2 !== 0.3 in IEEE 754. Con tolerance=0 (default), questo viene segnalato. Imposta tolerance a 1e-9 se intendi l'equivalenza numerica.
tolerance=0: 0.30000000000000004 ≠ 0.3
tolerance=1e-9: equal
Rumore timestamp e UUID
createdAt, updatedAt, requestId, traceId cambiano a ogni richiesta. Usa i preset Ignora percorsi per escluderli.
Diff: 47 modifications (45 are timestamps)
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes
Casi d'uso comuni
- Regressione risposta API
- Confronta le risposte di staging e produzione; ignora timestamp e ID delle richieste per evidenziare solo le modifiche significative al payload.
- Errori nei test snapshot CI
- Incolla il reale vs il previsto da uno snapshot Jest/Vitest fallito. Filtra il rumore e trova la vera modifica in pochi secondi.
- Conflitti package-lock / yarn.lock
- Risolvi i conflitti di merge allineando le dipendenze per nome; l'ordine delle key e i campi non correlati smettono di essere rumore.
- Audit valori K8s / Helm
- Abbina env, volumeMounts e port per nome. Rileva ordinamenti non intenzionali vs modifiche reali alla configurazione.
- Copertura traduzione i18n
- Confronta strutturalmente en.json con zh.json per trovare key di traduzione mancanti o in eccesso senza rumore sui valori.
- Revisione piano Terraform / CDK
- Confronta l'output del piano tra esecuzioni; la tolleranza numerica gestisce l'aritmetica floating-point, ignora percorsi esclude ARN e timestamp.
Dettagli tecnici
- Output patch conforme RFC 6902
- Genera operazioni JSON Patch valide (add/remove/replace) con percorsi RFC 6901. Verificato rispetto ai pacchetti npm fast-json-patch@3.x e rfc6902.
- Attraversamento iterativo
- Attraversamento con stack esplicito (senza ricorsione) con limite di 100.000 nodi e profondità 64 per prevenire stack overflow su input avversariali.
- Uguaglianza numerica Object.is
- La tolleranza numerica predefinita è 0 — usa Object.is quindi -0 e +0 sono distinti. Imposta tolleranza > 0 per l'uguaglianza basata su epsilon.
Best Practice
- Filtra prima di revisionare
- Aggiungi prima Ignora percorsi (timestamp, ID, campi trace), poi leggi il diff. Revisionare diff rumorosi addestra l'occhio a saltare — e perdere — le modifiche reali.
- Corrispondenza per key per insiemi logici
- Se il tuo array rappresenta un insieme non ordinato (env, utenti, dipendenze), usa Corrispondenza per key. Il diff sequenziale su insiemi logici è quasi sempre sbagliato.
- Condividi la configurazione, non gli input
- Usa Share Link per inviare a un collega la configurazione del filtro — non incollare mai JSON sensibili in documenti condivisi. L'URL contiene solo la configurazione.
Domande frequenti
Perché il diff mostra tutto cambiato quando ho modificato solo un campo?
Come ignoro timestamp e ID nel JSON diff?
Qual è la differenza tra JSON Patch e un diff visivo?
Il JSON diff tratta null e key mancanti allo stesso modo?
Come vengono confrontati gli array — per indice o per key?
Posso esportare il diff come JSON Patch RFC 6902?
JSON Patch è uguale a JSON Merge Patch (RFC 7396)?
Come confronto due grandi file JSON (>10 MB)?
Il tool invia il mio JSON a un server?
Perché 42 è diverso da "42" nel diff?
Posso fare il diff di JSON con commenti (JSONC) o virgole finali?
Come confronto array annidati di oggetti per una key come id?
Il diff gestisce la precisione floating-point (0.1 + 0.2)?
Strumenti correlati
Vedi tutti gli strumenti →Decodificatore e codificatore Base64
Codifica e formattazione
Decodifica e codifica Base64 online gratis. Conversione in tempo reale con pieno supporto UTF-8 ed emoji. 100% privato — gira nel tuo browser. Nessuna registrazione.
Formattatore e Validatore JSON
Codifica e formattazione
Formatta, valida e abbellisci JSON direttamente nel browser. Strumento online gratuito con controllo sintassi, rilevamento errori, minifica e copia in un clic. 100% privato.
Convertitore JSON in YAML
Codifica e formattazione
Incolla JSON e ottieni YAML istantaneamente nel browser. Conversione live, K8s e Compose, rientro 2/4 spazi, virgolette Norway-safe. 100% privato.
Codificatore e Decodificatore URL con Parser URL Integrato
Codifica e formattazione
Decodifica o codifica URL in tempo reale con parser URL integrato. Doppia modalità: encodeURI e encodeURIComponent. 100% privato, nessun dato inviato a server online.
Convertitore YAML in JSON
Codifica e formattazione
Incolla YAML e ottieni JSON istantaneamente nel browser. Supporta manifest K8s, specifiche OpenAPI e values Helm. 100% privato, nessun upload, nessun server.
Convertitore di Basi Numeriche — Bin, Hex, Ott, Dec
Strumenti di conversione
Converti istantaneamente tra binario, esadecimale, decimale, ottale e qualsiasi base (2-36). Strumento online gratuito e privato: tutta l'elaborazione avviene nel tuo browser.