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.

Consigli

  • 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.

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.