Che cosa fa questo strumento
Normalizza entrambi i lati — indentazione a due spazi, chiavi ordinate — poi li confronta riga per riga e mostra il risultato come diff unificato:
@@ -2,4 +2,4 @@
"host": "localhost",
- "port": 8080,
+ "port": 3000,
"tls": true
- è l’originale, + il modificato, e la riga @@ indica la regione. È il formato che parlano git diff e patch.
Che cosa conta come differenza
| differenza? | |
|---|---|
| Indentazione, ritorni a capo | no |
| Ordine delle chiavi in un oggetto | no, di default |
| Ordine degli elementi in un array | sì |
| Un valore cambiato | sì |
Oggetti e array sono trattati diversamente perché JSON li tratta diversamente: un oggetto è un insieme non ordinato di coppie, un array è una successione. Riordinare le chiavi di un oggetto dà lo stesso valore; riordinare gli elementi di un array ne dà un altro.
Fino all’ultima cifra
{ "id": 12345678901234567890 }
{ "id": 12345678901234567891 }
Questi due documenti differiscono, e questo strumento lo dice.
Vale la pena scriverlo perché non è sempre stato così. Normalizzare entrambi i lati con un’analisi JSON ordinaria faceva passare ogni numero per un valore in virgola mobile a doppia precisione, e i due identificatori — venti cifre, diversi solo nell’ultima — si confondevano in un unico valore. Il diff tornava vuoto, cosa che si legge come nessuna differenza.
Un diff vuoto è un’affermazione, non un’alzata di spalle. Uno strumento di confronto è proprio quello a cui si chiede di vedere ciò che l’occhio non vede: ora entrambi i lati sono letti senza perdita e confrontati così come sono scritti.
Le chiavi doppie vengono segnalate
Se uno dei due documenti ripete una chiave, il confronto si ferma e lo dice, esattamente come fa il formattatore JSON. Tenere solo l’ultima occorrenza di ciascuna — ciò che la maggior parte dei parser fa senza rumore — lascerebbe svanire una differenza reale tra i due file prima ancora di cominciare.
Privato per progettazione
Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.