Strumento di Confronto JSON - Confronta JSON Online Gratis | Differenze JSON
Confronta JSON online gratuitamente con il nostro veloce strumento di confronto JSON. Trova le differenze istantaneamente con risultati codificati a colori. Diff JSON 100% sicuro, basato sul browser. Nessuna registrazione necessaria.
Strumento di Confronto JSON
Documentazione
Uno strumento di confronto JSON, spesso chiamato strumento di diff JSON, confronta due valori JSON (JavaScript Object Notation) e riporta che cosa è cambiato tra l'uno e l'altro. Elenca ogni proprietà o elemento di array che è stato aggiunto, rimosso o modificato, insieme alla sua posizione esatta nei dati. Questa pagina spiega come funziona lo strumento di confronto JSON di whiz.tools, con esempi svolti basati sulla sua effettiva logica di confronto.
Che cos'è il confronto JSON?
Il confronto JSON è il processo con cui si controllano due documenti JSON l'uno rispetto all'altro per individuarne le differenze. Un documento JSON è un testo costruito con oggetti (coppie chiave-valore tra parentesi graffe), array (elenchi ordinati tra parentesi quadre) e valori primitivi come stringhe, numeri, booleani e null. Confrontare due di questi documenti a occhio è lento e soggetto a errori non appena superano poche righe, quindi uno strumento di confronto esegue automaticamente la corrispondenza ed evidenzia ogni modifica.
Gli sviluppatori usano questo tipo di confronto per controllare le risposte delle API, seguire le modifiche nei file di configurazione, verificare che una migrazione di dati non abbia perso informazioni e rivedere le modifiche ai file JSON nel controllo di versione.
Come lo strumento confronta due valori JSON
Lo strumento analizza entrambi gli input con un parser JSON standard, poi percorre insieme i due valori ottenuti, un livello alla volta. A ogni passo si pone tre domande, in ordine:
- I due valori hanno tipi diversi (per esempio uno è un oggetto e l'altro un numero), oppure uno dei due è
nulle l'altro no? In tal caso registra una modifica in quel punto e smette di confrontare più in profondità. - I due valori sono entrambi primitivi (una stringa, un numero, un booleano o null)? In tal caso li confronta direttamente. Qualsiasi differenza, compreso il passaggio dal numero
123alla stringa"123", conta come modifica. - I due valori sono entrambi oggetti o entrambi array? In tal caso ne confronta il contenuto secondo le regole riportate sotto e prosegue in modo ricorsivo in tutti gli oggetti o array annidati.
Ogni differenza viene registrata con un percorso, come user.address.city o tags[1], così da poterla trovare facilmente nel documento originale.
Confronto tra oggetti
Per due oggetti JSON, lo strumento raccoglie ogni chiave che compare in uno dei due oggetti. Per ogni chiave:
- Se la chiave esiste solo nel secondo oggetto, si tratta di una proprietà aggiunta.
- Se la chiave esiste solo nel primo oggetto, si tratta di una proprietà rimossa.
- Se la chiave esiste in entrambi, lo strumento confronta ricorsivamente i due valori.
L'ordine delle chiavi non conta. Lo standard JSON definisce un oggetto come una raccolta non ordinata di coppie nome/valore e un array come una sequenza ordinata, quindi {"a":1,"b":2} e {"b":2,"a":1} sono trattati come identici.
Confronto tra array
Gli array vengono confrontati per posizione, non per contenuto. Lo strumento scorre entrambi gli array indice per indice e confronta ciò che si trova a ciascun indice, fino alla lunghezza dell'array più lungo. Se un array è più corto, gli elementi in più alla fine di quello più lungo vengono segnalati come aggiunti o rimossi.
Ciò significa che lo strumento non cerca mai di abbinare gli elementi di un array in base al contenuto. Non si accorge che un oggetto è stato "spostato" dall'indice 1 all'indice 2; vede soltanto che il valore a ciascun indice è cambiato. Eliminare o inserire un elemento a metà di un array sposta di una posizione tutti gli elementi successivi, quindi di solito compare come più modifiche separate e non come una sola aggiunta o rimozione netta.
Esempi svolti
Esempio 1: confronto tra due oggetti
Primo JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Secondo JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Risultato:
- Modificato
user.address.city:"New York"→"Boston" - Modificato
user.address.zip:"10001"→"02108"
Esempio 2: una modifica di un array alla fine
Primo JSON:
1{ "tags": ["important", "urgent", "review"] }
2Secondo JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2L'indice 0 è invariato, l'indice 1 è cambiato, l'indice 2 è invariato e l'indice 3 esiste solo nel secondo array. Risultato:
- Modificato
tags[1]:"urgent"→"critical" - Aggiunto
tags[3]:"documentation"
Esempio 3: rimozione di un elemento a metà di un array
Questo esempio mostra che cosa accade quando un elemento viene rimosso da metà di un array, perché è una fonte frequente di confusione.
Primo JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Secondo JSON, con la voce "Mouse" eliminata e una voce "Monitor" aggiunta alla fine:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8Una persona che lo osserva direbbe «Mouse è stato rimosso e Monitor è stato aggiunto». Poiché lo strumento confronta rigorosamente per indice, non lo vede in questo modo. Confronta l'indice 0 con l'indice 0, l'indice 1 con l'indice 1 e l'indice 2 con l'indice 2, quindi ogni campo successivo all'elemento eliminato risulta allineato all'oggetto sbagliato. Il risultato effettivo è di sette modifiche:
- Modificato
products[0].price:999.99→899.99 - Modificato
products[1].id:2→3 - Modificato
products[1].name:"Mouse"→"Keyboard" - Modificato
products[1].price:24.99→59.99 - Modificato
products[2].id:3→4 - Modificato
products[2].name:"Keyboard"→"Monitor" - Modificato
products[2].price:59.99→349.99
Per ottenere un risultato più pulito quando si confrontano elenchi di questo tipo, si ordinano o si indicizzano entrambi gli array nello stesso modo prima di incollarli, per esempio scrivendo ogni elenco nello stesso ordine o abbinando gli oggetti tramite un campo ID prima del confronto.
Che cosa non fa lo strumento
- Non abbina gli elementi di un array in base al contenuto. Come mostrato sopra, confronta solo in base alla posizione dell'indice, quindi non può riconoscere che un elemento è stato spostato anziché modificato.
- Non rileva i riferimenti circolari. Nella pratica non è una limitazione: entrambi gli input provengono da
JSON.parse, che costruisce sempre un albero semplice e non può mai produrre un valore che rimandi a se stesso. In un testo JSON valido, del resto, i riferimenti circolari non possono esistere. - Non offre un'impostazione per ordinare gli array prima del confronto. Riordinare gli elementi dell'input prima di incollarli è l'unico modo per evitare l'effetto di spostamento degli indici descritto sopra.
Come utilizzare lo strumento
- Si incolla il primo documento JSON nella casella di sinistra e il secondo in quella di destra.
- Lo strumento li confronta automaticamente non appena entrambe le caselle contengono testo, oppure si fa clic su Confronta per eseguire il confronto manualmente.
- Si legge l'elenco dei risultati. Ogni riga mostra un percorso, come
user.age, e indica se è stato aggiunto, rimosso o modificato, con i valori vecchio e nuovo affiancati. - Si fa clic su Copia per copiare i risultati come testo semplice.
Se una delle due caselle contiene testo che non è JSON valido, lo strumento mostra un errore per quella casella invece di un confronto.
Domande frequenti
Che cosa conta come differenza tra due valori JSON?
Una proprietà o un elemento di array è diverso se esiste in uno solo dei due documenti, oppure se esiste in entrambi ma contiene un valore diverso o un tipo diverso. Cambiare un valore dal numero 5 alla stringa "5" conta come modifica, anche se possono sembrare simili.
L'ordine delle proprietà di un oggetto ha importanza? No. Gli oggetti JSON non hanno un ordine definito dei membri, quindi due oggetti con le stesse chiavi e gli stessi valori in ordine diverso sono trattati come identici.
L'ordine degli elementi di un array ha importanza? Sì. Gli array vengono confrontati per posizione dell'indice, quindi spostare un elemento in un'altra posizione dell'array è trattato come una serie di modifiche, non come uno spostamento.
I miei dati JSON vengono inviati a un server? No. Il confronto viene eseguito nel browser tramite JavaScript. Non viene caricato nulla.
La formattazione, come il rientro o la minificazione, influisce sul risultato? No. Entrambi gli input vengono analizzati in valori JSON prima del confronto, quindi spazi, rientri e interruzioni di riga non fanno alcuna differenza. Si confrontano soltanto i dati effettivi.
Lo strumento può confrontare JSON con commenti o virgole finali? No. Il JSON standard, come definito nella RFC 8259, non ha una sintassi per i commenti e array e oggetti non possono avere virgole finali. Il parser JSON del browser rifiuta un input di questo tipo come non valido.
Riferimenti
- Internet Engineering Task Force. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 — gli oggetti sono raccolte non ordinate di coppie nome/valore, gli array sono sequenze ordinate e la grammatica consente solo spazi tra i token.
- Mozilla Developer Network. JSON.parse(). Riferimento di JSON.parse() — un JSON non valido genera un SyntaxError, e array e oggetti non possono avere virgole finali.