JSON Diff : comparer deux documents JSON
Comparez deux documents JSON par leur structure, pas ligne par ligne. Tout s'exécute localement — rien n'est téléversé.
- Entrée
- Two JSON documents
- Sortie
- Path-level changes · JSON Patch
Original
valide
Modifié
valide
Différences
6 modifications
- Modifié/version
− 1
+ 2
- Ajouté/settings/language
+ "fr"
- Ajouté/users/0
+ {"id":3,"name":"Grace","email":"grace@example.com"}
- Modifié/users/1/email
− "ada@example.com"
+ "ada@example.org"
- Supprimé/users/1
− {"id":2,"name":"Linus","email":"linus@example.com"}
- Type modifié/limitchaîne → nombre
− "100"
+ 100
Comparer du JSON par son sens, pas par son texte
Cet outil de JSON diff compare deux documents JSON en tant que données. Les objets sont appariés clé par clé quel que soit l'ordre des clés, la mise en forme et l'indentation sont ignorées, et chaque différence est listée avec son chemin exact, le type de modification et l'ancienne et la nouvelle valeur. Les tableaux d'enregistrements peuvent être appariés par un champ id, pour qu'une liste retriée ou une ligne insérée en tête n'apparaisse pas comme si tout avait changé. Exportez le résultat en JSON Patch RFC 6902 ou en rapport texte. Les deux documents restent dans votre navigateur ; rien n'est téléversé.
Comment comparer deux fichiers JSON
- Collez le JSON original à gauche et le nouveau JSON à droite, ou déposez un fichier
.jsonde chaque côté. - Corrigez toute erreur d'analyse affichée au-dessus d'un panneau ; elle indique la ligne et la colonne.
- Lisez la liste des modifications, chacune avec son chemin JSON Pointer comme
/users/2/email, ou passez à la vue arbre pour les parcourir dans leur contexte. - Activez Apparier les éléments de tableau par clé et saisissez le champ qui identifie un enregistrement, généralement
id. - Filtrez par ajout, suppression, modification ou changement de type, puis copiez le JSON Patch ou téléchargez un rapport texte.
Pourquoi un diff texte n'est pas le bon outil pour du JSON
Deux documents JSON peuvent être identiques en tant que données et totalement différents en tant que texte. Une API renvoie les clés dans un autre ordre, un fichier est minifié et l'autre indenté, l'un écrit 1.0 là où l'autre écrit 1. Un comparateur de texte ligne à ligne signale tout cela. Un diff structurel analyse d'abord les deux côtés puis compare les valeurs, si bien que seules les vraies modifications sont signalées : une clé ajoutée ou supprimée, une valeur modifiée, ou une valeur dont le type a changé, comme la chaîne "42" devenue le nombre 42.
Les nombres sont comparés par valeur avec une précision totale : 1.50 est égal à 1.5, tandis que deux identifiants de 20 chiffres qui diffèrent au dernier chiffre restent signalés comme différents, ce qu'une comparaison via les nombres JavaScript manquerait.
- Ajouté
- La clé ou l'élément de tableau n'existe que dans le nouveau document.
- Supprimé
- La clé ou l'élément de tableau n'existe que dans le document original.
- Modifié
- Même emplacement, même type, valeur différente.
- Type modifié
- La valeur est devenue un autre type JSON, par exemple un objet devenu tableau ou un nombre devenu chaîne.
Comparer des tableaux : par position ou par clé
Par défaut, les éléments de tableau sont comparés position par position : l'élément 0 avec l'élément 0, l'élément 1 avec l'élément 1. C'est correct pour les listes où l'ordre compte, comme des coordonnées ou des étapes. Pour des listes d'enregistrements, ça ne l'est pas : insérez un utilisateur en tête et tous les suivants apparaissent modifiés.
Avec Apparier les éléments de tableau par clé, les éléments sont plutôt appariés par un champ d'identification, id par défaut. Chaque enregistrement est comparé à celui qui a le même id, où qu'il se trouve : le résultat indique alors qu'un utilisateur a été ajouté et qu'un e-mail a changé. L'appariement n'est utilisé que si chaque élément des deux côtés est un objet avec une chaîne ou un nombre unique dans ce champ ; sinon, le tableau est comparé par position.
La vue arbre fusionne les deux documents en une seule arborescence. Les branches contenant des modifications s'ouvrent automatiquement et les autres restent repliées, avec les ajouts en vert, les suppressions en rouge et les valeurs modifiées affichées sous la forme ancienne → nouvelle. Désactivez Modifications seulement pour voir les clés inchangées autour, pour le contexte.
Chemins, JSON Pointer et JSON Patch
Chaque modification est localisée par un JSON Pointer (RFC 6901) : un chemin depuis la racine, séparé par des barres obliques, comme /orders/0/total, où les éléments de tableau sont numérotés à partir de zéro et où les caractères ~ et / d'une clé s'écrivent ~0 et ~1. Un chemin vide désigne le document entier.
L'export est un JSON Patch (RFC 6902) : une liste d'opérations add, remove et replace qui, appliquées dans l'ordre, transforment le document de gauche en celui de droite. Des bibliothèques comme fast-json-patch, jsonpatch pour Python et le support des patchs de Kubernetes l'appliquent directement. Les suppressions dans un tableau sont écrites de l'indice le plus élevé vers le plus bas, pour que l'indice de chaque opération soit toujours correct au moment où elle s'exécute.
Pour remettre d'abord l'un ou l'autre document en forme, utilisez le JSON formatter ; pour convertir le résultat en YAML ou en CSV, utilisez le convertisseur de données.
Questions fréquentes
- Comment comparer deux fichiers JSON ?
- Collez ou déposez le JSON original à gauche et le nouveau JSON à droite. Chaque différence est listée avec son chemin, le type de modification et l'ancienne et la nouvelle valeur.
- L'ordre des clés compte-t-il lors de la comparaison de JSON ?
- Non. Les objets sont comparés clé par clé, donc les mêmes clés dans un autre ordre sont égales. Les espaces et l'indentation sont aussi ignorés.
- Comment comparer des tableaux JSON dont l'ordre a changé ?
- Activez Apparier les éléments de tableau par clé et saisissez le champ qui identifie chaque élément, comme id. Les éléments sont alors appariés par cette valeur plutôt que par position.
- Qu'est-ce qu'un JSON Patch ?
- Un JSON Patch, défini par la RFC 6902, est un tableau JSON d'opérations comme add, remove et replace, chacune avec un chemin. L'appliquer au document original produit le nouveau.
- Que signifie « type modifié » ?
- La valeur à ce chemin est devenue un autre type JSON, par exemple un nombre devenu chaîne ou un objet devenu tableau. Cela signale généralement un bug dans ce qui a produit les données.
- Peut-on comparer de gros fichiers JSON ?
- Oui. Des fichiers de plusieurs mégaoctets se comparent en bien moins d'une seconde sur un ordinateur courant, car l'analyse et la comparaison s'exécutent localement dans votre navigateur.
- Mon JSON est-il téléversé ?
- Non. Les deux documents sont analysés et comparés dans votre navigateur et ne sont jamais envoyés nulle part : vous pouvez comparer sans risque des réponses d'API contenant des données personnelles ou des secrets.