JSON Diff : comparaison structurelle de deux documents JSON
Comparez deux documents JSON par structure : chaque écart est signalé ADDED, REMOVED ou CHANGED avec son chemin exact. Ordre des clés et indentation ignorés.
Collez deux documents JSON à gauche et à droite : l'outil les compare par leur forme et leurs valeurs, pas comme deux blocs de texte. Un simple changement d'indentation ou un ordre de clés différent ne génère donc aucun bruit — les deux documents sont alors déclarés structurellement identiques. Chaque véritable écart est listé individuellement, avec son chemin (par exemple user.tags[1]) et son type : ADDED, REMOVED ou CHANGED. Tout se déroule dans votre navigateur, sans envoi des données.
Qu'est-ce que JSON Diff ?
JSON Diff est un comparateur structurel : au lieu d'aligner deux fichiers ligne par ligne, il analyse les deux documents puis parcourt leurs arborescences pour repérer chaque feuille qui diffère. Le résultat n'est pas un diff textuel mais une liste d'écarts typés — valeur ajoutée, supprimée ou modifiée — accompagnés du chemin qui y mène. Conséquence directe : la mise en forme et l'ordre des clés d'objet n'ont aucune importance, tandis que les tableaux restent comparés position par position.
Comment fonctionne la comparaison JSON
Les deux côtés sont analysés par JSON.parse puis parcourus en profondeur en parallèle : la comparaison porte donc sur le modèle de données, pas sur le texte. La RFC 8259 définit un objet comme une collection non ordonnée, d'où le fait qu'un changement d'ordre des clés ou d'indentation soit ici signalé comme identique, là où un diff par lignes y verrait une modification. Les clés présentes d'un seul côté deviennent AJOUTÉ ou SUPPRIMÉ ; les tableaux sont appariés par indice, si bien qu'une insertion en début de tableau décale tout le reste et apparaît comme une série de modifications plutôt qu'un déplacement. Les feuilles sont comparées par type et par valeur, ce qui fait de 30 contre "30" une vraie différence. Les chemins sont écrits avec points et crochets (user.tags[1]), dans l'esprit du JSON Pointer qui adresse un nœud précis du document.
Ce que fait l'outil
Comment utiliser le comparateur
Collez le premier document dans le champ de gauche — en général la version de référence (réponse d'API attendue, fixture, ancienne configuration).
Collez le second document dans le champ de droite : la version à vérifier.
Lisez le statut : soit les deux documents sont structurellement identiques, soit le nombre d'écarts détectés s'affiche.
Parcourez la liste des différences : chaque ligne indique ADDED, REMOVED ou CHANGED, le chemin concerné (x.y[1]) et les valeurs en jeu, tronquées à 60 caractères.
Erreurs fréquentes
Exemples
Voir aussi
- Formateur JSON — Un côté refuse de s'analyser ? Formatez-le d'abord : le formateur désigne le caractère fautif.
- CSV vers JSON — Vous comparez deux exports de tableur ? Passez-les en JSON et comparez la structure.
FAQ
Pourquoi deux fichiers d'apparence très différente sont-ils déclarés identiques ?
Parce que la comparaison porte sur la structure, pas sur le texte. Une indentation à deux ou quatre espaces, des sauts de ligne différents ou des clés d'objet écrites dans un autre ordre décrivent exactement les mêmes données : l'outil répond donc « structurellement identiques ».
Comment les tableaux sont-ils comparés ?
Par index, et uniquement par index : l'élément 0 de gauche est confronté à l'élément 0 de droite, et ainsi de suite. Aucune tentative de reconnaître qu'un élément a simplement été déplacé n'est faite, si bien qu'une insertion en tête de tableau décale les positions et fait apparaître une différence à chaque rang.
Un changement de type est-il détecté ?
Oui. Si une feuille vaut 42 d'un côté et "42" de l'autre, l'écart est rapporté comme CHANGED, exactement comme si la valeur elle-même avait changé. C'est utile pour repérer une API qui sérialise soudainement un identifiant numérique en chaîne.
Pourquoi mes valeurs sont-elles coupées dans le rapport ?
Pour garder le rapport lisible : chaque valeur affichée est tronquée à 60 caractères. Une longue chaîne encodée ou un texte volumineux apparaît donc raccourci dans la liste des différences, mais la comparaison a bien porté sur la valeur entière.