Outil de Comparaison JSON - Comparez JSON en Ligne Gratuitement | Différence JSON
Comparez JSON en ligne gratuitement avec notre outil de comparaison JSON rapide. Trouvez les différences instantanément avec des résultats codés par couleur. Diff JSON 100% sécurisé, basé sur le navigateur. Aucune inscription requise.
Outil de Comparaison JSON
Documentation
Un outil de comparaison JSON, souvent appelé outil de diff JSON, compare deux valeurs JSON (JavaScript Object Notation) et indique ce qui a changé entre elles. Il liste chaque propriété ou élément de tableau ajouté, supprimé ou modifié, avec son emplacement exact dans les données. Cette page explique le fonctionnement de l'outil de comparaison JSON de whiz.tools, avec des exemples détaillés fondés sur sa logique de comparaison réelle.
Qu'est-ce que la comparaison JSON ?
La comparaison JSON consiste à confronter deux documents JSON pour en trouver les différences. Un document JSON est un texte construit à partir d'objets (paires clé-valeur entre accolades), de tableaux (listes ordonnées entre crochets) et de valeurs primitives telles que les chaînes, les nombres, les booléens et null. Comparer deux de ces documents à l'œil est lent et source d'erreurs dès qu'ils dépassent quelques lignes ; un outil de comparaison fait donc la mise en correspondance automatiquement et met en évidence chaque changement.
Les développeurs utilisent ce type de comparaison pour vérifier des réponses d'API, suivre les changements dans des fichiers de configuration, s'assurer qu'une migration de données n'a perdu aucune information et relire les modifications de fichiers JSON dans un système de gestion de versions.
Comment l'outil compare deux valeurs JSON
L'outil analyse les deux entrées avec un analyseur JSON standard, puis parcourt ensemble les deux valeurs obtenues, un niveau à la fois. À chaque étape, il se pose trois questions, dans l'ordre :
- Les deux valeurs sont-elles de types différents (par exemple, l'une est un objet et l'autre un nombre), ou l'une vaut-elle
nullet pas l'autre ? Si oui, il enregistre une modification à cet endroit et arrête la comparaison en profondeur. - Les deux valeurs sont-elles des primitives (chaîne, nombre, booléen ou null) ? Si oui, il les compare directement. Toute différence, y compris le passage du nombre
123à la chaîne"123", compte comme une modification. - Les deux valeurs sont-elles des objets, ou des tableaux ? Si oui, il compare leur contenu selon les règles ci-dessous et descend récursivement dans les objets ou tableaux imbriqués.
Chaque différence est enregistrée avec un chemin, par exemple user.address.city ou tags[1], ce qui permet de la retrouver facilement dans le document d'origine.
Comparaison d'objets
Pour deux objets JSON, l'outil rassemble toutes les clés présentes dans l'un ou l'autre objet. Pour chaque clé :
- Si la clé n'existe que dans le second objet, il s'agit d'une propriété ajoutée.
- Si la clé n'existe que dans le premier objet, il s'agit d'une propriété supprimée.
- Si la clé existe dans les deux, l'outil compare récursivement les deux valeurs.
L'ordre des clés n'a pas d'importance. La norme JSON définit un objet comme une collection non ordonnée de paires nom/valeur et un tableau comme une séquence ordonnée ; {"a":1,"b":2} et {"b":2,"a":1} sont donc considérés comme identiques.
Comparaison de tableaux
Les tableaux sont comparés par position, et non par contenu. L'outil parcourt les deux tableaux indice par indice et compare ce qui se trouve à chaque indice, jusqu'à la longueur du plus long. Si un tableau est plus court, les éléments en trop à la fin du plus long sont signalés comme ajoutés ou supprimés.
Cela signifie que l'outil ne cherche jamais à associer des éléments de tableau d'après leur contenu. Il ne remarque pas qu'un objet a été « déplacé » de l'indice 1 à l'indice 2 ; il constate seulement que la valeur de chaque indice a changé. Supprimer ou insérer un élément au milieu d'un tableau décale d'une position tous les éléments suivants, ce qui apparaît généralement sous la forme de plusieurs modifications distinctes plutôt que d'un simple ajout ou d'une simple suppression.
Exemples détaillés
Exemple 1 : comparaison de deux objets
Premier JSON :
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Second JSON :
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Résultat :
- Modifié
user.address.city:"New York"→"Boston" - Modifié
user.address.zip:"10001"→"02108"
Exemple 2 : modification d'un tableau à la fin
Premier JSON :
1{ "tags": ["important", "urgent", "review"] }
2Second JSON :
1{ "tags": ["important", "critical", "review", "documentation"] }
2L'indice 0 est inchangé, l'indice 1 a changé, l'indice 2 est inchangé et l'indice 3 n'existe que dans le second tableau. Résultat :
- Modifié
tags[1]:"urgent"→"critical" - Ajouté
tags[3]:"documentation"
Exemple 3 : suppression d'un élément au milieu d'un tableau
Cet exemple montre ce qui se passe lorsqu'un élément est retiré du milieu d'un tableau, car c'est une source fréquente de confusion.
Premier 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}
8Second JSON, avec l'entrée « Mouse » supprimée et une entrée « Monitor » ajoutée à la fin :
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}
8Une personne qui regarde ce résultat dirait : « Mouse a été supprimé et Monitor a été ajouté. » Comme l'outil compare strictement par indice, il ne le voit pas ainsi. Il compare l'indice 0 à l'indice 0, l'indice 1 à l'indice 1 et l'indice 2 à l'indice 2 ; chaque champ situé après l'élément supprimé se retrouve donc aligné sur le mauvais objet. Le résultat réel compte sept modifications :
- Modifié
products[0].price:999.99→899.99 - Modifié
products[1].id:2→3 - Modifié
products[1].name:"Mouse"→"Keyboard" - Modifié
products[1].price:24.99→59.99 - Modifié
products[2].id:3→4 - Modifié
products[2].name:"Keyboard"→"Monitor" - Modifié
products[2].price:59.99→349.99
Pour obtenir un résultat plus lisible en comparant des listes de ce type, triez ou indexez les deux tableaux de la même façon avant de les coller, par exemple en écrivant chaque liste dans le même ordre ou en associant les objets par un champ d'identifiant avant la comparaison.
Ce que l'outil ne fait pas
- Il n'associe pas les éléments de tableau d'après leur contenu. Comme indiqué plus haut, il compare uniquement par position d'indice ; il ne peut donc pas reconnaître qu'un élément a été déplacé plutôt que modifié.
- Il ne détecte pas les références circulaires. Ce n'est pas une limite en pratique : les deux entrées proviennent de
JSON.parse, qui construit toujours un arbre simple et ne peut jamais produire une valeur qui se référence elle-même. Les références circulaires ne peuvent de toute façon pas exister dans un texte JSON valide. - Il ne propose pas de réglage pour trier les tableaux avant la comparaison. Réordonner les éléments de vos données avant de les coller est le seul moyen d'éviter l'effet de décalage d'indice décrit plus haut.
Comment utiliser l’outil
- Collez le premier document JSON dans la zone de gauche et le second dans la zone de droite.
- L'outil les compare automatiquement dès que les deux zones contiennent du texte, ou vous pouvez cliquer sur Comparer pour lancer la comparaison manuellement.
- Lisez la liste des résultats. Chaque ligne indique un chemin, par exemple
user.age, et précise s'il a été ajouté, supprimé ou modifié, les anciennes et nouvelles valeurs étant affichées côte à côte. - Cliquez sur Copier pour copier les résultats sous forme de texte brut.
Si l'une des zones contient du texte qui n'est pas du JSON valide, l'outil affiche une erreur pour cette zone au lieu d'une comparaison.
Foire aux questions
Qu'est-ce qui constitue une différence entre deux valeurs JSON ?
Une propriété ou un élément de tableau est différent s'il n'existe que dans l'un des deux documents, ou s'il existe dans les deux mais avec une valeur ou un type différent. Passer d'une valeur de type nombre 5 à une chaîne "5" compte comme une modification, même si elles peuvent se ressembler.
L'ordre des propriétés d'un objet a-t-il de l'importance ? Non. Les objets JSON n'ont pas d'ordre défini pour leurs membres ; deux objets ayant les mêmes clés et les mêmes valeurs dans un ordre différent sont donc considérés comme identiques.
L'ordre des éléments d'un tableau a-t-il de l'importance ? Oui. Les tableaux sont comparés par position d'indice ; déplacer un élément à une autre position du tableau est donc traité comme une série de modifications, et non comme un déplacement.
Mes données JSON sont-elles envoyées à un serveur ? Non. La comparaison s'exécute dans le navigateur avec JavaScript. Rien n'est envoyé.
La mise en forme, comme l'indentation ou la minification, modifie-t-elle le résultat ? Non. Les deux entrées sont analysées en valeurs JSON avant la comparaison ; les espaces, l'indentation et les retours à la ligne n'ont donc aucune incidence. Seules les données elles-mêmes sont comparées.
L'outil peut-il comparer du JSON avec des commentaires ou des virgules finales ? Non. Le JSON standard, tel que défini dans la RFC 8259, n'a aucune syntaxe pour les commentaires, et les tableaux et les objets ne peuvent pas comporter de virgules finales. L'analyseur JSON du navigateur rejette une telle entrée comme invalide.
Références
- Internet Engineering Task Force. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 — les objets sont des collections non ordonnées de paires nom/valeur, les tableaux sont des séquences ordonnées, et la grammaire n'autorise que des espaces entre les jetons.
- Mozilla Developer Network. JSON.parse(). Référence de JSON.parse() — un JSON invalide déclenche une SyntaxError, et les tableaux et les objets ne peuvent pas comporter de virgules finales.