Comparateur de différences JSON

Comparez deux documents JSON et voyez instantanément quelles clés ont été ajoutées, supprimées ou modifiées, listées par chemin de clé. Les objets et tableaux sont parcourus récursivement, et même les incohérences de type sont signalées comme des changements. Tout se traite dans votre navigateur, sans envoi vers un serveur.

Astuces

  • Les chemins de clé s'affichent en notation point/crochet, comme `user.address[0].city`, ce qui permet de repérer immédiatement quelle valeur imbriquée a changé, quelle que soit la profondeur de la structure JSON.
  • Les tableaux sont comparés en associant les éléments au même index. Notez qu'un simple réordonnancement des éléments d'un tableau sera détecté comme un changement pour tous les éléments.
  • Si une même clé contient une chaîne dans un document et un objet dans l'autre, cette incohérence de type est également signalée comme un changement, avec les deux valeurs brutes affichées côte à côte.
  • Lorsque vous comparez des réponses d'API avant et après un déploiement, retirez d'abord les champs qui changent systématiquement, comme les horodatages ou les identifiants de requête, afin de vous concentrer uniquement sur les différences qui comptent vraiment.
  • Même pour un JSON contenant énormément de valeurs inchangées, seul le nombre de valeurs feuilles identiques est affiché, ce qui garde le résultat lisible plutôt que surchargé.

Questions fréquentes

Il est couramment utilisé pour comparer la réponse d'une API avant et après un déploiement afin de détecter des changements involontaires, ou pour repérer les différences entre des fichiers de configuration (comme config.json) selon les environnements. Extraire uniquement les différences est bien plus rapide que de comparer deux JSON à l'œil nu.

Non. Les clés d'un objet sont associées par leur nom, donc peu importe que A et B les listent dans un ordre différent. Seule l'existence de chaque clé et la correspondance de sa valeur sont prises en compte, l'ordre visuel dans le texte source étant ignoré.

Les tableaux sont associés par index (0e, 1er élément, etc.), donc même si le contenu réel est identique, un changement d'ordre sera détecté comme une modification à cet index. Cet outil ne prend pas en charge une comparaison de tableaux insensible à l'ordre.

Non. Toute la logique de comparaison s'exécute entièrement dans le JavaScript de votre navigateur, et le contenu saisi n'est jamais transmis à un serveur, ce qui permet de comparer en toute sécurité même des réponses contenant des clés d'API ou des données personnelles.

Si JSON.parse échoue, un message d'erreur indique clairement si A ou B présente un format invalide, et aucune différence n'est calculée. Cela vous donne un point de départ pour repérer les erreurs courantes, comme une virgule manquante ou une guillemet non fermé.
ツールくん

Anecdote — En quoi l'appariement des clés diffère entre le diff CSV et le diff JSON

Notre comparateur de différences CSV (dev.csv.csv_diff) compare lignes et cellules en s'appuyant sur une seule colonne clé désignée pour identifier chaque ligne. Le JSON ne possède pas de structure plate en lignes et colonnes — il autorise l'imbrication d'objets et de tableaux — donc, bien que les deux outils portent le nom de « comparateur de différences », l'algorithme d'appariement sous-jacent est assez différent. Au lieu d'une colonne clé, cet outil utilise un « chemin de clé » construit récursivement depuis la racine jusqu'à chaque feuille comme unité de comparaison.

Les tableaux constituent la partie la plus délicate lors de la comparaison de JSON. Une ligne CSV peut être identifiée de façon unique par la valeur de sa colonne clé, mais les éléments d'un tableau JSON ne possèdent aucun identifiant garanti. Cet outil associe simplement les éléments par index (ordre d'apparition), une conception mieux adaptée pour suivre les changements de structure d'un objet ou de valeurs primitives — comme dans des fichiers de configuration ou des réponses d'API — que pour suivre les ajouts et suppressions au sein du contenu d'un tableau.

En pratique, une idée similaire apparaît dans les pipelines d'intégration continue qui vérifient automatiquement si le contrat de réponse d'une API REST a changé. Cet outil privilégie la commodité de fonctionner entièrement dans le navigateur, mais le concept sous-jacent rejoint les tests de snapshot et les tests de contrat (contract testing) : détecter mécaniquement les différences de structure JSON est un défi récurrent à de nombreuses étapes du développement logiciel.

→ Voir toutes les anecdotes