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.

Entrée

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

Comparaison par structure et par valeur : réordonner les clés d'un objet ou réindenter le fichier ne crée aucune différence.
Parcours en profondeur d'abord : chaque feuille divergente est signalée séparément, aussi profonde soit-elle.
Trois types d'écart explicites — ADDED (présent seulement à droite), REMOVED (présent seulement à gauche), CHANGED (valeur différente).
Chemin complet pour chaque écart, en notation pointée avec index de tableau : config.hosts[2].port.

Comment utiliser le comparateur

1

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).

2

Collez le second document dans le champ de droite : la version à vérifier.

3

Lisez le statut : soit les deux documents sont structurellement identiques, soit le nombre d'écarts détectés s'affiche.

4

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

Attendre une correspondance de tableaux par contenu : les tableaux sont alignés par index, donc insérer un élément en première position décale tout et produit un écart à chaque rang.
Considérer 42 et "42" comme équivalents : un changement de type est rapporté comme CHANGED, au même titre qu'un changement de valeur.
S'inquiéter d'une valeur qui semble coupée : les valeurs affichées sont tronquées à 60 caractères pour la lisibilité, le document d'origine n'est pas modifié.

Exemples

{"a":1,"b":2} et {"b":2,"a":1} -> structurellement identiques (aucune différence : l'ordre des clés est ignoré)
{"user":{"tags":["a","b"]}} et {"user":{"tags":["a","c"]}} -> CHANGED user.tags[1] : "b" -> "c"
{"id":42,"name":"Ana"} et {"id":"42"} -> CHANGED id : 42 -> "42" ; REMOVED name : "Ana"

Voir aussi

  • Formateur JSONUn côté refuse de s'analyser ? Formatez-le d'abord : le formateur désigne le caractère fautif.
  • CSV vers JSONVous 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.