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