Un diff de texte sur JSON signale la mauvaise chose plus souvent qu’il ne signale la bonne. Réindentez un fichier, ou déplacez une propriété du bas vers le haut, et un diff basé sur les lignes s’allume comme des dizaines de lignes modifiées même si les données sont identiques. Ce que vous voulez réellement savoir, c’est si les valeurs ont changé, pas si les octets l’ont fait.
Utiliser l’outil de diff JSON
Collez le document original dans Avant et le modifié dans Après, puis appuyez sur Comparer. Chaque différence dans le résultat porte le chemin de la valeur et les deux côtés du changement, donc vous lisez “$.b a changé de "x" à "y"” au lieu de compter les signes plus et moins.
Comparer
{"a":1,"b":"x","c":true,"nested":{"n":1.0}}
contre
{"b":"y","c":true,"d":"new","nested":{"n":1}}
signale exactement trois différences : $.a supprimé, $.b change de "x"
à "y", et $.d ajouté. Rien d’autre. $.c est identique et n’apparaît
pas. $.nested.n n’apparaît pas non plus, car 1.0 et 1 signifient le
même nombre.
Comment les objets et tableaux sont comparés différemment, à dessein
Les objets sont traités comme non ordonnés, car c’est ce que la spécification JSON dit qu’ils sont : un ensemble de paires nom et valeur sans ordre défini. Réordonner les clés d’un objet n’est pas un changement ici, et un outil de diff qui le signalerait comme tel signalerait sur le formatage, pas sur les données.
Les tableaux sont comparés par position, car c’est la seule lecture honnette disponible. L’outil ne peut pas savoir si vous avez inséré un élément au milieu d’une liste ou réécrit chaque élément après, donc il ne devine pas. Insérer un élément près du début d’un long tableau apparaîtra comme de nombreux changements positionnels, ce qui est correct même si cela surprend la première fois.
Ce qui compte comme égal
1 et 1.0 sont la même valeur, et deux orthographes différentes d’un
échappement dans une chaîne sont la même chaîne. Le seul endroit où cela
devient strict est les grands entiers : deux nombres de vingt chiffres
doivent correspondre chiffre par chiffre avant d’être appelés égaux, car
un double JavaScript ne peut pas les représenter de manière unique et un diff
qui traiterait silencieusement deux grands IDs différents comme le même
nombre serait activement faux. Les trois règles sont indiquées sur la page,
car un diff qui décide silencieusement est un sur lequel vous ne pouvez
pas agir.
Intervertir les côtés
Si vous avez collés les documents dans le mauvais ordre, Intervertir les côtés retourne la comparaison sans tout retaper, ce qui change aussi contre quelle côté une addition ou un retrait est signalé.