Comparaison structurelle de JSON

Comparez deux structures JSON et examinez les ajouts, suppressions et modifications à des chemins explicites, en conservant l’écriture des nombres sans arrondi.

Cette page présente les outils disponibles dans cette langue dans le périmètre actuel. Cela ne signifie pas que tous les outils du site sont traduits dans toutes les langues.

Le traitement est local, sans envoi des entrées ni enregistrement automatique. Chaque entrée est limitée à 256 KiB en UTF-8, soit 512 KiB au total ; profondeur 32, 30 000 valeurs par entrée, 2000 différences et un rapport de 1 MiB. La comparaison s’arrête après 5 secondes.

L’ordre des clés d’un objet est ignoré. Les tableaux sont comparés par indice, sans détection des déplacements. Les nombres sont comparés selon leur écriture : 1, 1.0 et 1e0 sont différents, sans arrondir les grands nombres. Les chaînes JSON sont décodées pour la comparaison sans normalisation Unicode. Changer le type d’une branche, l’ajouter ou la supprimer produit une ligne contenant la branche entière.

Entrées de la comparaison

Mode d’emploi

Collez les textes JSON avant et après, puis comparez-les. Examinez le type de changement, le chemin et le texte JSON avant et après chaque changement ; parcourez les pages de l’aperçu si nécessaire. Choisissez de copier le rapport complet ou de le télécharger sous le nom json-diff.json. Modifier une entrée invalide le résultat précédent ; le rapport ne remplace aucune entrée.

Exemple pratique

Avant : {"n":1,"a":[1,2]} ; après : {"a":[2,1],"n":1.0}. Trois changements apparaissent : /n du texte 1 au texte 1.0, /a/0 de 1 à 2 et /a/1 de 2 à 1. Changer uniquement l’ordre des deux clés de l’objet n’ajoute aucun changement. La clé a/b~c apparaît au chemin /a~1b~0c.

Fonctionnalités prises en charge et limites

L’ordre des clés d’un objet est ignoré, mais les tableaux sont comparés par indice ; aucun déplacement d’éléments ni aucune correspondance d’ensembles n’est déduit. Les nombres sont comparés selon leur écriture originale : 1, 1.0 et 1e0 diffèrent et ne sont jamais convertis en Number. Les chaînes JSON sont décodées pour la comparaison sans normalisation Unicode. Ajouter une branche, la supprimer ou changer son type produit une ligne contenant la branche entière. Un chemin vide désigne la racine ; JSON Pointer échappe ~ en ~0 et / en ~1. Les champs before et after du rapport sont des chaînes contenant du JSON compact, et non des valeurs numériques arrondies. Un champ est omis lorsque ce côté est absent, tandis que JSON null est représenté par la chaîne "null". Le rapport décrit des différences ; ce n’est pas un JSON Patch permettant d’appliquer des modifications. Le traitement reste dans le navigateur, sans exécuter le contenu JSON, l’envoyer ni l’enregistrer ou le copier automatiquement.

Questions fréquentes

Un résultat égal signifie-t-il que les textes sont identiques octet par octet ?

Non. Les espaces hors des chaînes, l’ordre des clés d’un objet et l’écriture des échappements de caractères peuvent différer tout en donnant des valeurs égales selon ces règles. La liste changes est alors vide et le rapport peut toujours être copié ou téléchargé. À l’inverse, une écriture différente d’un nombre ou un ordre différent des éléments d’un tableau constitue une différence, même si le sens semble proche.

Outils associés