YamlBox

JSON outils · 6 minutes de lecture

JSON diff : comparer les données telles qu'elles sont

Un texte différent vous indique quels caractères ont changé. Un diff JSON vous indique quelles valeurs ont changé, et ce sont des questions différentes – souvent avec des réponses différentes. Étant donné que l'ordre des objets JSON n'est pas significatif, une charge utile qu'une comparaison basée sur les lignes restitue sous la forme d'une réécriture totale peut être structurellement identique, tandis qu'un véritable changement d'une seule valeur imbriquée peut se cacher dans une très longue ligne minifiée.

Mis à jour

Pourquoi les différences de texte échouent sur JSON

Trois propriétés de JSON interrompent la comparaison au niveau des caractères. L'ordre des clés n'est pas significatif, donc le même objet sérialisé de deux manières semble différent ligne par ligne. Les espaces ne sont pas significatifs, donc un document joliment imprimé et son jumeau minifié apparaissent complètement différents. Et les tableaux sont positionnels, donc une seule insertion décale chaque ligne suivante et produit une cascade de fausses différences qui enterre le seul changement réel.

Ce que rapporte plutôt une comparaison structurelle

Un diff JSON analyse les deux documents, parcourt les arborescences résultantes et rapporte les modifications par chemin : clés ajoutées, clés supprimées, valeurs qui ont modifié le type ou le contenu et les entrées de tableau qui ont été déplacées. Le résultat se lit comme `spec.replicas: 3 → 5` plutôt que comme vingt lignes de contexte décalé. Ce sont les informations dont vous avez besoin lorsqu'un déploiement se comporte différemment et que vous souhaitez savoir ce qui a réellement changé dans la configuration.

                - spec.template.spec.containers[0].image
+   ghcr.io/acme/web:1.4.2 → ghcr.io/acme/web:1.5.0
- metadata.annotations["deployed-by"]   (removed)
              

Utiliser un diff JSON dans un travail réel

  • API versioning — comparez les réponses v1 et v2 pour la même requête et lisez le changement de contrat directement sur les chemins.
  • Échec des instantanés de test : voyez quel champ a dérivé au lieu de régénérer l'instantané et d'espérer.
  • Examen de l'infrastructure : comparez un manifeste rendu avant et après une mise à niveau de graphique.
  • Vérifications de migration : confirmez qu'une exportation a conservé chaque clé après une modification du schéma ou de la base de données.

L'ordre est important pour les tableaux et non pour les objets : un tableau réorganisé est un réel changement, alors qu'un objet réorganisé ne l'est pas. Un diff structurel JSON connaît la différence ; une différence de texte ne le sera jamais.

Détails pratiques à connaître

Les deux documents doivent être valides JSON avant que toute comparaison soit significative, les erreurs de validation doivent donc apparaître en premier, avec ligne et colonne. Surveillez la dérive de type ainsi que la dérive de valeur : `"3"` et `3` semblent presque identiques mais brisent les consommateurs qui supposent l'un ou l'autre. Et lorsqu'un côté est vide ou un seul objet tandis que l'autre est un tableau, cela est généralement le signe d'un changement de forme API plutôt que d'un changement de données. Une comparaison JSON à deux volets rend les deux côtés visibles à la fois, ce qui est plus rapide que la comparaison d'un fichier avec une copie mémorisée.

Gardez les charges utiles locales

Les différences sont exactement les documents que vous souhaitez le moins télécharger : réponses de production, charges utiles de facturation, exportations avec lignes clients. Les comparer dans le navigateur signifie que l'analyse, le parcours dans l'arborescence et la différence rendue se produisent tous sur votre machine, et que l'outil continue de fonctionner avec le réseau déconnecté.

JSON Diff. — questions fréquemment posées

L'ordre des clés affecte-t-il une différence de JSON ?

Non. L'ordre des clés d'objet n'est pas significatif dans JSON, donc une différence structurelle traite les clés réordonnées comme inchangées. Si les changements d'ordre sont significatifs pour vous, il s'agit d'une sémantique JSON-with-order — par exemple une carte sérialisée — et appartient plutôt à un tableau.

Comment comparer deux fichiers JSON qui ne sont pas valides ?

Ils doivent d'abord être valides. Exécutez les deux via un formateur ou un validateur JSON, corrigez la ligne et la colonne signalées, puis comparez. Une différence sur une entrée mal formée produit des différences qui sont des artefacts de l'erreur de syntaxe plutôt que de véritables changements de données.

Un diff JSON peut-il afficher les valeurs qui ont été ajoutées ou supprimées ?

Oui, c'est le principal avantage par rapport à une différence de texte. Les chemins ajoutés et supprimés sont signalés explicitement, ainsi que les valeurs modifiées et leurs types, de sorte qu'une annotation supprimée est aussi visible qu'une balise d'image modifiée.

Outils mentionnés dans cet article

Parcourez la liste complète des 19 outils

Plus d'articles à lire

Tous les 19 messages →