Comparer deux JSON : les différences champ par champ
Comparez deux documents JSON champ par champ ; chaque valeur ajoutée, supprimée ou modifiée est listée avec son chemin
Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.
Cet outil a-t-il fait le travail ?
Merci, votre retour nous est bien parvenu.
Comment ça marche
Collez l'ancien JSON dans le panneau de gauche et le nouveau dans celui de droite ; les différences s'affichent aussitôt en dessous. Si vous préférez une seule zone, placez entre les deux documents une ligne contenant seulement ---. Le signe en début de ligne indique ce qui s'est passé : + champ ajouté, - champ supprimé, ~ valeur modifiée. Dans l'exemple, le prix passe de 250 à 230, la ville du vendeur disparaît, « promo » s'ajoute aux étiquettes et le stock est désormais entre guillemets ; le résultat affiche « ~ $.prix: 250 → 230 », « - $.vendeur.ville », « + $.etiquettes[2] » et « ~ $.stock: 42 → "42" » avec la mention du changement de type. L'ordre d'écriture des clés et l'indentation ne comptent pas. Si seul l'ordre d'une liste a changé, réglez « Ordre dans les tableaux » sur « Ne compte pas ». Si l'un des documents est invalide, l'outil indique lequel et à quelle ligne de la zone.
Cet outil est aussi connu sous le nom de comparer deux json, comparer json en ligne, json diff, json compare, comparer fichiers json.
Qu'est-ce que JSONPath (chemin) ?
Un chemin JSON est l'adresse d'une valeur dans le document. $ désigne la racine, un point ouvre un champ enfant, un nombre entre crochets choisit un élément d'une liste : $.vendeur.nom est le champ nom de l'objet vendeur, $.etiquettes[2] la troisième étiquette (on compte à partir de 0). Les clés avec espace ou tiret s'écrivent $["nom complet"]. Comme chaque différence est donnée avec ce chemin, vous n'avez pas à chercher la modification dans un long document.
Qu'est-ce que JSON diff ?
Un JSON diff compare deux documents JSON en tant que données et liste ce qui a été ajouté, supprimé ou modifié. Contrairement à une comparaison de texte ligne par ligne, il ignore la mise en forme, l'indentation et l'ordre des clés, mais tient compte du type de chaque valeur. Les développeurs s'en servent pour voir comment une réponse d'API a changé d'une version à l'autre, pourquoi deux environnements se comportent différemment avec leurs fichiers de configuration, ou quels enregistrements un export a modifiés.
Quelle différence entre comparer du JSON et comparer du texte ?
Une comparaison de texte traite les deux fichiers comme des chaînes et les compare ligne par ligne ; une indentation ou un ordre de clés différent suffit à créer une différence. Une comparaison JSON lit d'abord les deux documents sous forme d'arbre et compare les valeurs au même chemin ; la mise en forme ne compte pas, tandis que les changements de type comme 42 devenu « 42 » sont détectés. Utilisez la comparaison de texte pour des contrats, des articles ou du texte brut, et la comparaison JSON pour des réponses d'API et des fichiers de configuration.
Pourquoi une comparaison ligne par ligne trompe sur du JSON
Les outils de comparaison de texte comparent des lignes. Le même JSON peut sortir d'un programme avec les clés triées par ordre alphabétique et d'un autre dans l'ordre d'insertion, sur une seule ligne ou indenté. Une comparaison ligne par ligne annonce alors des centaines de différences alors que les données sont identiques. Cet outil transforme d'abord les deux documents en arbre, puis compare les valeurs situées au même chemin : la mise en forme n'arrive jamais jusqu'au résultat.
À l'inverse, un nombre devenu texte passe facilement inaperçu : 42 et « 42 » se ressemblent à l'écran, mais le programme qui lit le JSON attend un nombre dans un cas et du texte dans l'autre. L'outil ajoute donc le changement de type en fin de ligne (nombre → texte).
- {"a":1,"b":2} et {"b":2,"a":1} → aucune différence
- [1,2] et [2,1] → 2 modifications si l'ordre compte, aucune sinon
- 18 et "18" → ~ modifié, type : nombre → texte
Quel réglage choisir
Si l'ordre d'une liste a un sens dans une réponse d'API (résultats classés, étapes, pages), gardez « Compte » ; les éléments sont comparés position par position. Si la liste sert d'ensemble (étiquettes, droits d'accès, liste de diffusion), choisissez « Ne compte pas » ; un élément correspond où qu'il se trouve, et seuls les éléments réellement ajoutés ou supprimés restent.
Pour un rapport de modifications, « Seulement les différences » suffit. Pour relire deux fichiers de configuration en entier, choisissez « Tous les champs » ; les valeurs inchangées s'affichent aussi, décalées par des espaces. Les très grands entiers (au-delà de 2^53, comme des identifiants à 19 chiffres) peuvent être arrondis par JavaScript : l'outil prévient dans la ligne de résultat s'il en rencontre un.
Questions fréquentes
Comment comparer deux fichiers JSON ?
Collez le premier JSON dans le panneau de gauche et le second dans celui de droite. L'outil compare les deux sous forme d'arbre et affiche chaque différence avec son chemin : « ~ $.prix: 250 → 230 » signifie que le prix a changé, « - $.vendeur.ville » que le champ a été supprimé.
Un ordre de clés différent compte-t-il comme une différence ?
Non. Dans un objet JSON, l'ordre des clés n'a aucun sens ; {"a":1,"b":2} et {"b":2,"a":1} contiennent les mêmes données et l'outil n'annonce aucune différence. L'indentation, les espaces et les retours à la ligne sont aussi ignorés.
Puis-je ignorer l'ordre des éléments dans les tableaux ?
Oui. Réglez « Ordre dans les tableaux » sur « Ne compte pas ». Alors ["a","b"] et ["b","a"] sont considérés comme égaux, et seuls les éléments présents dans une liste mais absents de l'autre apparaissent avec + ou -.
Le JSON collé est-il envoyé quelque part ?
Non. La comparaison se fait entièrement dans votre navigateur ; même un JSON contenant des clés d'API ou des données de clients n'atteint aucun serveur.