Sur cette page

Pour interpréter les différences entre deux documents JSON, appliquez trois règles : JSON Diff ignore les espaces de mise en forme et l’ordre des propriétés des objets, compare les tableaux par indice et distingue un champ absent d’un champ présent avec null. Le comparateur interprète les valeurs JSON plutôt que les lignes. Utilisez ces règles pour prévoir le résumé de chaque paire avant de la tester.

Ce qui change entre les entrées Comparaison effectuée par JSON Diff Résultat attendu
Indentation, sauts de ligne ou ordre des clés d’un objet Associe les propriétés par leur nom et compare leurs valeurs. Aucune différence si les valeurs restent identiques.
Éléments d’un tableau Associe chaque ancien indice au même nouvel indice. Une insertion au début peut produire plusieurs modifications et un ajout.
Champ absent face à un champ avec null Vérifie l’existence de la propriété ainsi que sa valeur. Un ajout lorsqu’elle apparaît ; une suppression lorsqu’elle disparaît.

Testez les paires suivantes dans JSON Diff, avec la première entrée comme JSON précédent et la seconde comme nouveau JSON. Les espaces dans une chaîne font partie de sa valeur : "A B" et "AB" sont différents.

Même valeur, texte différent : pourquoi aucune différence ?

Avant :

{"a":1,"b":2}

Après :

{
  "b": 2,
  "a": 1
}

Le résumé attendu est 0 ajouts, 0 suppressions et 0 modifications : 0 différences au total. Les deux entrées contiennent a avec la valeur 1 et b avec la valeur 2. Changer leur présentation ne change pas ces valeurs.

Un diff textuel par lignes pourrait signaler le passage d’une ligne à plusieurs, les espaces et l’ordre des clés. Une comparaison sémantique élimine ce bruit lorsque vous cherchez à savoir si les données ont changé. JSON Diff ne propose pas de vue de diff textuel.

La distinction entre objets et tableaux vient du format : la RFC 8259, section 4 décrit les objets comme des collections sans ordre ; les tableaux sont des séquences ordonnées selon la section 5. L’association par indice est la règle propre à ce comparateur.

Insertion au début d’un tableau : pourquoi trois différences ?

Avant :

{"items":["A","B"]}

Après :

{"items":["X","A","B"]}

La version actuelle compare les positions, en commençant à l’indice 0 :

Chemin Type Avant → après
$.items[0] Modification "A" → "X"
$.items[1] Modification "B" → "A"
$.items[2] Ajout Absent → "B"

Le résumé attendu est 1 ajout, 0 suppressions et 2 modifications : 3 différences au total. L’ajout correspond à "B" au nouvel indice [2], même si vous avez ajouté "X" au début.

L’algorithme ne déduit pas que « X a été inséré et les autres éléments décalés ». Il ne détecte pas non plus les déplacements et n’associe pas les éléments par un champ id. Lisez chaque ligne comme une différence entre les valeurs à cette position, plutôt que comme l’historique des éditions.

Propriété absente, null et “null” : quelle différence ?

Comparez cette entrée précédente :

{}

avec cette nouvelle entrée :

{"nota":null}

Le résumé est 1 ajout, 0 suppressions et 0 modifications : 1 différence au total :

Chemin Type Avant → après
$.nota Ajout Absent → null

La propriété nota n’existe pas dans {}. Dans la seconde entrée, elle existe et sa valeur est null. Inverser les entrées produit une suppression au même chemin.

Comparez maintenant avant :

{"nota":null}

avec après :

{"nota":"null"}

Le résumé est 0 ajouts, 0 suppressions et 1 modification : 1 différence au total :

Chemin Type Avant → après
$.nota Modification null → "null"

La propriété existe dans les deux objets, mais passe de la valeur JSON null à une chaîne de quatre lettres. Tous ces extraits sont du JSON valide : la validité syntaxique et l’égalité des valeurs répondent à des questions différentes.

Ce qu’un diff vide signifie et ce qu’il ne prouve pas

Une comparaison terminée sans différences indique que les valeurs représentées sont égales selon ces règles. Elle ne prouve ni que les textes d’origine sont identiques, ni que le comportement d’une application est équivalent. Pour décider quels changements sont attendus et lesquels demandent une recherche de régression, consultez le guide pour comparer des réponses JSON d’API.

Nombres et limites : le comparateur utilise des nombres JavaScript ; les nombres très grands ou très précis peuvent perdre de la précision lors de l’analyse. L’outil affiche un avertissement lorsqu’il détecte ce risque et ne propose pas de précision numérique arbitraire. Il exige du JSON strict et rejette les clés dupliquées. Chaque entrée accepte jusqu’à 1 000 000 d’unités UTF-16 et 200 niveaux d’imbrication ; la comparaison accepte jusqu’à 1 000 enregistrements de changement et dispose d’un budget de travail. Si une limite est atteinte, réduisez l’échantillon : une opération échouée ne prouve pas l’égalité. La page de JSON Diff détaille les limites actuelles.

Partager ce guide

Lien de l’article