Vai al contenuto
Diff

Diff online testo e JSON

Confronto side-by-side di due testi o di due payload JSON con algoritmo di Myers. Quattro modalità di confronto: linee, parole, caratteri o struttura JSON parsata. Output disponibile anche come patch unificato in formato diff -u, applicabile con git apply o con il classico comando patch -p0: utile per code review, per propagare modifiche fra branch o per generare un changelog tecnico riusabile in pipeline.

Side-by-side


            

        

Inline (verde = aggiunto, rosso = rimosso)



        
    

Come usare il diff tool

  1. 1

    Incolla i due testi

    Sinistra (Original/left) il testo di partenza, destra (Modified/right) la versione modificata. I campi accettano testo libero, JSON, log, output di comandi, qualsiasi cosa.

  2. 2

    Scegli la modalità

    Linee per file di codice o config. Parole per prose o documentazione (rivela meglio le modifiche frammentate). Caratteri per single-line tweaks. JSON per confronto strutturato (gestisce key reorder, nested objects).

  3. 3

    Leggi il diff

    Side-by-side: due colonne, sinistra con removed (rosso barrato), destra con added (verde). Inline: una colonna unica con + e - marcati. Stats in cima: caratteri aggiunti, rimossi, invariati.

  4. 4

    Esporta in patch

    Il formato patch unificato (diff -u) è compatibile con git apply, patch -p0, code review tool. Copia/scarica per applicare la diff a un repo o per revisione.

Cosa lo distingue, in pratica

JSON-aware. Un diff a livello stringa fra due JSON formattati diversamente produce risultati poco utili: l'80% delle righe risulta cambiato per pure differenze di whitespace o di ordinamento delle chiavi, mentre la modifica logica è una sola. La modalità JSON di questo tool parsifica i due input prima di confrontarli, ignora whitespace e re-serializza il diff con indentazione consistente. Il risultato evidenzia solo le differenze logiche reali fra i due payload.

Privacy operativa. Codice, log applicativi, config e JSON di payload reali sono spesso confidenziali: contengono identificatori interni, password in commenti, struttura del modello dati, riferimenti a backend privati. Il calcolo del diff avviene direttamente nel browser sui due testi che incolli, senza che vengano trasferiti a un servizio terzo che potrebbe loggarli o archiviarli.

Patch unificato standard. L'output in formato diff -u rispetta lo standard POSIX con header ---/+++, hunk @@ -L,N +L,N @@ e righe di contesto. È applicabile direttamente con git apply changes.patch o con patch -p0 < changes.patch, ed è incollabile in qualsiasi code review tool. Niente formato proprietario, niente trial limit per l'export.

Glossario

Termini tecnici usati in questa pagina, spiegati in due righe.

Myers algorithm #
Algoritmo per il calcolo della longest common subsequence (LCS) e quindi del minimum edit script tra due sequenze. Eugene Myers, 1986. Complessità O(N+M+D^2) con D = numero di edit. Standard de facto per text diff.
Patch unificato #
Formato testuale per esprimere le differenze tra due file. Header con nomi, hunk preceduti da @@ -L,N +L,N @@, righe modificate prefissate da +/-, righe context senza prefisso. Standard POSIX, applicabile con patch o git apply.
Side-by-side diff #
Visualizzazione a due colonne: sinistra l'originale, destra il modificato. Comune nei code review tool (GitHub, GitLab, Phabricator). Variante: 'inline' o 'split' (terminologia GitHub).
JSON structural diff #
Confronto JSON che parse i due input prima del diff, ignorando whitespace e key order. Dipende dall'implementazione: alcune library considerano {a:1, b:2} e {b:2, a:1} identici, altre no. jsdiff li tratta come diversi (ordine matters).
Hunk #
Sezione di un patch unificato che descrive un blocco contiguo di modifiche. Inizia con @@ e contiene linee di context, +, -. File con molte modifiche distanti = molti hunk separati.

Domande frequenti

Posso fare diff di file binari (immagini, PDF, exe)?
No. Questo tool è text-only. Per file binari: cmp -l a.bin b.bin mostra i byte diversi a livello shell, oppure tool dedicati come vbindiff o radiff2. Per immagini: ImageMagick compare o tool grafici dedicati.
Il diff JSON gestisce key order diverso come 'identico'?
No. Il modo JSON di jsdiff parse i due input ma poi serializza con stesso indent e ordine, mostrando le differenze incluso il riordino di chiavi. Per ignorare il key order: prima ordina le chiavi (es. con il JSON formatter del reame), poi confronta. Risultato pulito: solo differenze di valore, niente noise di ordering.
Funziona offline dopo il primo caricamento?
Si. La libreria jsdiff è caricata via vendor, niente fetch al server. Una volta in cache, il tool funziona senza rete. Bookmark per uso air-gapped.
Il patch generato è compatibile con git apply?
Si. createPatch() di jsdiff produce output formato unified standard (diff -u), con header, hunk, righe context. Direttamente applicabile via git apply changes.patch in un repo che ha la versione 'left' come stato corrente. Per altri tool: patch -p0 < changes.patch per patch in cima al file.
C'e' un limite di dimensione per gli input?
Niente di hardcoded. La memoria del tab del browser è il limite. File di 100KB-1MB sono comodi, oltre 5MB l'UI può diventare lenta (Myers è O(N+M+D^2), il D^2 cresce con il delta). Per file enormi: diff -u file1 file2 a riga di comando è più efficiente.
Posso fare diff a tre vie (3-way merge)?
Non in V1. jsdiff non implementa 3-way merge. Per quel caso: git merge-file, kdiff3, meld sono i tool standard. Lo aggiungero' come tool dedicato in futuro se la roadmap lo richiede.
Il modo Words è adatto per documenti tecnici?
Si. E' meglio del modo Lines per documentazione e prose (markdown, AsciiDoc) perché una modifica di una parola in mezzo a un paragrafo non viene mostrata come 'tutta la riga cambiata'. Per codice sorgente, Lines resta migliore (gli edit sono per riga).
Differenze fra Myers e patience diff (git default in alcune config)?
Patience diff è una variante che parte dalle 'unique lines' (righe che appaiono una sola volta in ciascun file) e le usa come ancore. Tipicamente produce diff più leggibili in caso di refactor (riordinamento di blocchi). jsdiff implementa Myers classico. Per codice con grossi refactor, git diff con --patience o --histogram può essere preferibile a un diff Myers puro.

Chi sviluppa questi strumenti?

Maurizio Fonte, consulente IT senior con oltre 20 anni di esperienza in PHP, Laravel, infrastrutture Linux, cybersecurity e integrazione AI/LLM in azienda. Backend di produzione, modernizzazione di codice legacy, audit di sicurezza, agenti AI e MCP server custom: il lavoro che sta dietro a questi strumenti.

Conosci Maurizio Fonte