Confronto delle differenze fra documenti JSON

Confronta due documenti JSON e mostra a colpo d'occhio le chiavi aggiunte, eliminate e modificate, indicandone il percorso. Percorre in modo ricorsivo oggetti e vettori e segnala come modifica anche le differenze di tipo. L'elaborazione avviene interamente nel navigatore e nulla viene trasmesso ad alcun servente.

Che cos'è il confronto delle differenze fra documenti JSON

Il confronto delle differenze fra documenti JSON mette a raffronto due documenti JSON struttura per struttura e mostra a colpo d'occhio quali chiavi sono state aggiunte, quali eliminate e quali valori sono cambiati. Risulta particolarmente utile quando leggere il testo per intero, affiancando i due documenti, non è più praticabile per la quantità di informazione coinvolta: una risposta di un'interfaccia la cui forma è cambiata fra due versioni, oppure un file di configurazione che differisce da un ambiente all'altro. Questo strumento percorre oggetti e vettori in modo ricorsivo e segnala le differenze a livello di percorso della chiave, permettendo di individuare con precisione dove sia cambiato un valore anche in un JSON annidato in profondità.

Perché il confronto funzioni, entrambi i documenti devono essere JSON strutturalmente validi. Se uno dei due presenta un errore di sintassi — una virgola mancante, una virgoletta non chiusa e simili — lo strumento segnala quale fra A e B sia malformato, senza tentare di calcolare una differenza. Vale la pena inoltre comprendere le due diverse regole di abbinamento adottate: le chiavi degli oggetti sono abbinate per nome, mentre gli elementi dei vettori sono abbinati per indice, cioè per ordine di comparsa. Tenere presente questo principio aiuta a interpretare perché una determinata chiave risulti «modificata» anziché «aggiunta» o «eliminata».

Come usare il confronto delle differenze fra documenti JSON

  1. Incollate il JSON di partenza (A) Incollate o digitate il testo JSON nel primo campo. Potete copiare un file di configurazione o una risposta di interfaccia esistente così com'è, senza doverli riformattare.
  2. Incollate il JSON di confronto (B) Incollate la versione «dopo», o il JSON proveniente da un ambiente diverso, nel secondo campo. Quale documento collocate in A e quale in B determina la direzione indicata per le chiavi «aggiunte» ed «eliminate».
  3. Provate i dati di esempio (facoltativo) Fate clic su «Carica un esempio» per riempire entrambi i campi con un esempio che include aggiunte, eliminazioni e modifiche, così da vedere subito il formato del risultato.
  4. Leggete i risultati del confronto Le chiavi eliminate, aggiunte e modificate sono elencate insieme al loro percorso. Per le chiavi modificate, i valori prima e dopo sono mostrati affiancati, in modo da cogliere la differenza a colpo d'occhio.
  5. Cancellate i campi quando serve Usate il pulsante «Cancella» per svuotare entrambi i campi e iniziare il confronto di un'altra coppia di documenti JSON.

Consigli per sfruttarlo al meglio

  • I percorsi sono mostrati con la notazione a punti e parentesi, come `user.address[0].city`: anche in un JSON profondamente annidato si individua subito a quale livello il valore sia cambiato.
  • I vettori sono confrontati abbinandone gli elementi per posizione: attenzione, perché un vettore in cui sia soltanto cambiato l'ordine risulterà con tutti gli elementi modificati.
  • Anche quando una stessa chiave è una stringa da una parte e un oggetto dall'altra, cioè quando differisce il tipo, la differenza è segnalata come modifica e sono mostrati entrambi i valori grezzi.
  • Confrontando le risposte di un'interfaccia prima e dopo un rilascio, conviene eliminare in anticipo i campi che cambiano a ogni chiamata — marche temporali, identificativi di richiesta — per concentrarsi sulle differenze che contano davvero.
  • Anche nei documenti con moltissimi valori invariati il risultato resta leggibile, perché delle foglie coincidenti si riporta soltanto il conteggio complessivo.

Situazioni d'uso

Individuare modifiche indesiderate nelle risposte di un'interfaccia

Salvate la risposta di un'interfaccia prima e dopo un rilascio del servente e confrontatele qui per individuare per tempo aggiunte, eliminazioni o cambi di tipo indesiderati, prima che raggiungano gli utenti in produzione.

Confrontare file di configurazione fra ambienti diversi

Confrontate il config.json o il package.json di collaudo e di produzione per individuare variabili d'ambiente mancanti o versioni non allineate che altrimenti passerebbero inosservate.

Spiegare una differenza durante una revisione del codice

Quando si esamina un contenuto di migrazione o una definizione di schema in formato JSON, si può condividere direttamente l'elenco delle differenze generato, invece di descrivere le modifiche a voce o in un lungo scambio di commenti.

Individuare la causa di una prova per istantanee fallita

Confrontate l'istantanea JSON prodotta da una prova automatica con il valore atteso per individuare rapidamente quale campo abbia causato l'esito negativo della prova.

Verificare i contenuti ricevuti da servizi esterni

Confrontate un contenuto realmente ricevuto da una notifica automatica (webhook) con un esempio documentato, per verificare che corrisponda davvero alla struttura descritta nella specifica dell'interfaccia.

Glossario

Percorso della chiave
Una stringa che rappresenta il tragitto dalla radice di un documento JSON fino a un valore preciso, scritta con la notazione a punti e parentesi come `user.address[0].city`. I risultati del confronto sono raggruppati e mostrati a questo livello.
Struttura annidata
Una struttura in cui un oggetto o un vettore contiene a sua volta altri oggetti o vettori. Quanto più profonda è la struttura annidata, tanto più difficile diventa individuare le modifiche a occhio nudo.
Foglia
Un valore terminale in un albero JSON che non si ramifica ulteriormente: una stringa, un numero, un valore booleano o null. Il confronto delle differenze consiste, in ultima analisi, nell'abbinare fra loro i valori delle foglie.
Differenza di tipo
Una situazione in cui il valore allo stesso percorso della chiave è di un tipo di dato (ad esempio una stringa) in un documento e di un tipo diverso (ad esempio un oggetto) nell'altro. Questo strumento segnala come modifica anche le differenze di tipo.
Errore di sintassi
Un testo malformato che fa fallire l'analisi del JSON. Una virgola mancante o una virgoletta non chiusa sono esempi tipici.
JSONPath
Una specifica di linguaggio di interrogazione per indirizzare valori all'interno di un documento JSON. La notazione del percorso della chiave usata in questo strumento è, concettualmente, una versione semplificata affine alla sintassi di JSONPath.

Domande frequenti

Si usa spesso per confrontare la risposta di un'interfaccia prima e dopo un rilascio, verificando che non si siano insinuate modifiche indesiderate, oppure per individuare le differenze fra i file di configurazione di ambienti diversi. Estrarre soltanto i punti cambiati rende la verifica assai più rapida del confronto a vista.

Sì. Le chiavi degli oggetti sono abbinate per nome, perciò un diverso ordine di scrittura fra A e B non incide sul rilevamento delle differenze: contano soltanto la presenza della chiave e la coincidenza del valore, non l'ordine apparente nel documento.

I vettori sono confrontati abbinando gli elementi per indice, cioè per posizione: anche a parità di contenuto, un ordine diverso fa risultare modificato il valore di quella posizione. Non è previsto un confronto che ignori il contenuto e tolleri i soli riordinamenti.

No. Il confronto avviene interamente nel JavaScript del navigatore e quanto inserite non viene mai trasmesso ad alcun servente: potete confrontare con serenità anche risposte che contengano chiavi di accesso o dati personali.

Se l'analisi fallisce compare un messaggio d'errore che indica quale dei due documenti sia malformato e il calcolo delle differenze non viene eseguito. È un indizio utile per individuare la posizione degli errori di sintassi più comuni, come una virgola di troppo o una virgoletta non chiusa.
Tool-kun

A proposito — differenze fra CSV e JSON nel modo di abbinare le chiavi

Il nostro strumento di confronto fra file CSV lavora indicando una colonna chiave e confrontando riga per riga e cella per cella. Il JSON non ha una struttura piatta di righe e colonne, ma ammette oggetti annidati e vettori: pur trattandosi in entrambi i casi di un «confronto di differenze», la progettazione dell'algoritmo è molto diversa. Qui, al posto della colonna chiave, l'unità di abbinamento è il percorso della chiave, seguito in modo ricorsivo dalla radice fino alle foglie.

Nel rilevamento delle differenze in JSON il punto più spinoso sono i vettori. Le righe di un file CSV si identificano univocamente con il valore della colonna chiave, mentre agli elementi di un vettore JSON non è garantito alcun identificativo. Questo strumento adotta il metodo più semplice, l'abbinamento per indice, cioè per ordine di comparsa: una scelta adatta ai casi in cui interessa seguire i cambiamenti della struttura degli oggetti e dei valori elementari — confronto di file di configurazione e di risposte di interfacce — più che quelli in cui si aggiungono ed eliminano elementi.

Nella pratica un'idea simile si usa anche per verificare automaticamente, nell'integrazione continua, che la specifica delle risposte di un'interfaccia REST non sia cambiata. Questo strumento privilegia la comodità di risolvere tutto nel navigatore, ma l'impostazione è la stessa delle prove per istantanee e delle prove di contratto: rilevare meccanicamente le differenze fra strutture JSON è un problema che ritorna in molti momenti dello sviluppo.