Comparez deux documents JSON par structure plutôt que par ligne. Signale les chemins ajoutés, supprimés et modifiés, avec une option pour ignorer l'ordre des tableaux. S'exécute entièrement dans votre navigateur.
Comparez par structure, pas par ligne. Collez deux documents et obtenez un rapport chemin par chemin de ce qui a été ajouté, supprimé ou modifié. Comme la comparaison parcourt les valeurs analysées, le reformatage ou la réorganisation des clés n'apparaît pas comme une différence.
–
Différences
Pourquoi un diff texte est le mauvais outil pour le JSON
Les diffs par ligne voient la mise en forme, pas le sens
Un diff standard basé sur les lignes traite le JSON comme de la prose. Réindentez un fichier de deux espaces à quatre et chaque ligne est marquée comme modifiée. Déplacez une clé du haut d'un objet vers le bas et vous obtenez une suppression plus une insertion, même si la valeur analysée est exactement la même. Mettez une longue tableau sur une seule ligne et tout le bloc s'allume.
Un diff structurel analyse d'abord les deux côtés puis parcourt les valeurs obtenues. La mise en forme, l'ordre des clés et les espaces ont disparu avant même que la comparaison commence, donc les seules choses qui peuvent être signalées sont de vraies différences dans les données. C'est ce qui rend la sortie assez courte pour être réellement lue.
Des chemins, pas des numéros de ligne
Chaque différence ici est signalée par un chemin comme user.roles[2] ou meta.updated. Un chemin survit aux éditions ailleurs dans le document, ce qu'un numéro de ligne ne fait pas, donc vous pouvez coller le même rapport dans un ticket ou une revue de code et il pointe encore au bon endroit une semaine plus tard.
Les trois opérations se mapent sur ce qui peut réellement arriver à un arbre. Une clé présente à gauche mais pas à droite est une suppression, l'inverse est un ajout, et une clé présente des deux côtés avec une valeur différente est une modification. Les changements de type — un champ qui était le nombre 1 et est maintenant la chaîne "1" — sont aussi signalés comme des modifications, et ils méritent attention, car ils sont une source courante de bugs en aval qu'aucune vérification de schéma ne capture.
Les tableaux et la question de l'ordre
Les tableaux sont là où le diff structurel prend position. Par défaut la comparaison est positionnelle : l'index 0 à gauche est comparé à l'index 0 à droite. C'est correct pour des données ordonnées comme une séquence d'étapes, mais cela produit un résultat trompeur pour une liste qui est en fait un ensemble — réorganisez les éléments et chaque position semble modifiée.
L'option ignorer l'ordre des tableaux canonise les deux côtés en triant les tableaux en profondeur avant de comparer, donc une liste réorganisée se compare comme égale. Utilisez-la pour les listes de tags, les ensembles de permissions et les résultats de requête sans ordre garanti. Laissez-la désactivée quand la position d'un élément a un sens, car avec elle activée, un vrai bug de réorganisation devient invisible.
FAQ
En quoi est-ce différent d'un diff texte normal ?
Un diff texte compare les lignes, donc réindenter ou réorganiser des clés apparaît comme un changement. Cet outil analyse d'abord les deux côtés, donc seules les vraies différences dans les données sont signalées.
Que signifient les symboles +, - et ~ ?
Le plus est un chemin présent seulement dans le document modifié, le moins est présent seulement dans l'original, et le tilde est un chemin présent des deux côtés avec une valeur différente.
Pourquoi un tableau réorganisé est-il signalé comme modifié ?
Par défaut les tableaux sont comparés position par position, ce qui est correct pour des données ordonnées. Activez l'option d'ignorer l'ordre des tableaux pour les comparer comme des ensembles non ordonnés.
L'ordre des clés dans un objet compte-t-il ?
Non. Les objets sont comparés par clé, donc déplacer un champ dans un objet ne produit jamais de différence. Seules les positions des éléments de tableau sont sensibles à l'ordre.
Un nombre devenu chaîne est-il signalé ?
Oui. Un changement de type est signalé comme une modification, ce qui est délibéré : 1 et "1" se comportent très différemment en aval et la disparité est facile à manquer sinon.
Mes documents sont-ils envoyés vers un serveur ?
Non. Les deux côtés sont analysés et comparés dans votre navigateur, donc rien n'est téléversé, journalisé ou stocké.