Générateur de JSON Patch
Comparez deux documents JSON et obtenez le patch RFC 6902 qui transforme le premier en le second. Tout s'exécute dans votre navigateur.
Ce que fait cet outil
Il compare deux documents JSON et écrit la liste des opérations qui transforme le premier en le second, dans le format défini par le RFC 6902. Au lieu d'envoyer un document entier pour dire qu'un champ a changé, vous envoyez le changement lui-même.
Quand l'utiliser
Utilisez-le pour construire le corps d'une requête PATCH, pour consigner ce qui a changé entre deux versions d'un fichier de configuration, ou pour conserver une piste d'audit bien plus légère que de garder chaque copie complète. C'est aussi un moyen rapide de découvrir ce qui diffère réellement entre deux documents qui se ressemblent.
Les opérations qu'il produit
| Opération | Ce que cela veut dire |
|---|---|
| add | Ajoute une valeur là où il n'y en avait pas, ou insère dans un tableau. |
| remove | Supprime la valeur à cet emplacement. |
| replace | Écrase la valeur d'un emplacement qui existe déjà. |
| move | Déplace une valeur d'un emplacement à un autre. |
| copy | Copie une valeur vers un autre emplacement. |
| test | Vérifie une valeur et abandonne tout le patch si elle ne correspond pas. |
Cet outil n'écrit que add, remove et replace. Ces trois-là suffisent à exprimer n'importe quel changement, et un patch qui se lit ligne à ligne vaut mieux qu'un patch plus court sur lequel il faut réfléchir. Les trois autres font partie du RFC 6902 et tout serveur conforme les accepte.
Comment fonctionnent les chemins
Chaque chemin est un JSON Pointer (RFC 6901) : un itinéraire séparé par des barres obliques depuis la racine du document, où « /address/zipCode » désigne le champ zipCode à l'intérieur de address. Les positions d'un tableau sont des nombres, donc « /skills/0 » est le premier élément, et un tiret désigne la fin du tableau : « /skills/- » ajoute à la fin. Comme la barre oblique est le séparateur, une clé qui en contient une s'écrit ~1, et un tilde littéral ~0.
Remarques sur le résultat
La comparaison est littérale : elle compare les valeurs position par position, si bien qu'insérer un élément au début d'un tableau produit un replace sur tous les suivants plutôt qu'une seule insertion. Pour des tableaux d'objets dotés d'identifiants stables, un patch produit à partir des identifiants sera toujours plus court qu'un patch produit à partir des positions.
Comment générer un JSON Patch
Collez deux documents JSON et générez le patch.
- Collez le JSON d'origine à gauche.
- Collez le JSON modifié à droite.
- Cliquez sur Générer, puis copiez le patch.
Questions fréquentes
Cet outil envoie-t-il mes données quelque part ?
Non. Les deux documents restent dans votre navigateur et le patch est produit sur votre propre machine.
Le résultat est-il conforme au RFC 6902 ?
Oui. Chaque opération est un objet avec op, path et — pour add et replace — value, et les chemins sont des JSON Pointer tels que le RFC 6901 les définit.
Inclut-il les opérations move et copy ?
Non. Il écrit add, remove et replace, qui suffisent à exprimer n'importe quel changement et sont bien plus faciles à lire. Un move n'est qu'un remove suivi d'un add.
Comment appliquer le patch ?
Envoyez-le à une API qui accepte application/json-patch+json, ou utilisez une bibliothèque : jsonpatch en Python, json-patch en JavaScript, JsonPatchDocument en .NET, json-patch en Java, et ainsi de suite.
Quelle différence avec JSON Merge Patch ?
JSON Merge Patch (RFC 7386) ressemble au document lui-même, avec null qui signifie « supprimer ». Cela le rend facile à lire, mais incapable de stocker un vrai null ou de toucher à un seul élément d'un tableau. JSON Patch est plus verbeux et peut tout exprimer.
Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST