Generatore di JSON Patch
Confronta due documenti JSON e ottieni il patch RFC 6902 che trasforma il primo nel secondo. Tutto funziona nel tuo browser.
Che cosa fa questo strumento
Confronta due documenti JSON e scrive l'elenco di operazioni che trasforma il primo nel secondo, nel formato definito dall'RFC 6902. Invece di inviare un documento intero per dire che è cambiato un campo, invii la modifica stessa.
Quando usarlo
Usalo per costruire il corpo di una richiesta PATCH, per registrare che cosa è cambiato fra due versioni di un file di configurazione o per conservare una traccia di controllo molto più piccola rispetto a tenere ogni copia intera. È anche un modo rapido per scoprire che cosa differisce davvero fra due documenti che sembrano uguali.
Le operazioni che genera
| Operazione | Che cosa significa |
|---|---|
| add | Aggiunge un valore dove non ce n'era nessuno, o inserisce in un array. |
| remove | Elimina il valore in quella posizione. |
| replace | Sovrascrive il valore di una posizione che esiste già. |
| move | Sposta un valore da una posizione a un'altra. |
| copy | Copia un valore in un'altra posizione. |
| test | Controlla un valore e annulla l'intero patch se non corrisponde. |
Questo strumento scrive solo add, remove e replace. Queste tre bastano a esprimere qualsiasi modifica, e un patch che si legge riga per riga vale più di uno più corto su cui bisogna ragionare. Le altre tre fanno parte dell'RFC 6902 e qualsiasi server conforme le accetta.
Come funzionano i percorsi
Ogni percorso è un JSON Pointer (RFC 6901): una strada separata da barre a partire dalla radice del documento, dove “/address/zipCode” indica il campo zipCode dentro address. Le posizioni di un array sono numeri, quindi “/skills/0” è il primo elemento, e un trattino indica la fine dell'array: “/skills/-” aggiunge in coda. Poiché la barra è il separatore, una chiave che ne contiene una si scrive ~1, e una tilde letterale ~0.
Note sul risultato
Il confronto è letterale: mette a confronto i valori posizione per posizione, quindi inserire un elemento all'inizio di un array produce un replace su tutti quelli successivi invece di un solo inserimento. Per array di oggetti con identificatori stabili, un patch generato a partire dagli identificatori sarà sempre più piccolo di uno generato a partire dalle posizioni.
Come generare un JSON Patch
Incolla due documenti JSON e genera il patch.
- Incolla il JSON originale a sinistra.
- Incolla il JSON aggiornato a destra.
- Fai clic su Genera, poi copia il patch.
Domande frequenti
Questo strumento invia i miei dati da qualche parte?
No. Entrambi i documenti restano nel tuo browser e il patch viene generato sulla tua macchina.
Il risultato è conforme all'RFC 6902?
Sì. Ogni operazione è un oggetto con op, path e — per add e replace — value, e i percorsi sono JSON Pointer così come li definisce l'RFC 6901.
Include le operazioni move e copy?
No. Scrive add, remove e replace, che bastano a esprimere qualsiasi modifica e sono molto più facili da leggere. Un move è semplicemente un remove seguito da un add.
Come applico il patch?
Invialo a un'API che accetta application/json-patch+json, oppure usa una libreria: jsonpatch in Python, json-patch in JavaScript, JsonPatchDocument in .NET, json-patch in Java, e così via.
Che differenza c'è con JSON Merge Patch?
JSON Merge Patch (RFC 7386) somiglia al documento stesso, e null significa “cancella”. Questo lo rende facile da leggere, ma incapace di conservare un null vero o di toccare un singolo elemento di un array. JSON Patch è più prolisso e può esprimere qualsiasi cosa.
Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST