JSON Diff (Comparateur)
Comparez deux fichiers JSON instantanément dans votre navigateur. Vue côte à côte, sortie JSON Patch RFC 6902, ignorer les champs bruyants comme les horodatages et les ID. 100% privé, aucun envoi.
Options avancées
Qu'est-ce que JSON Diff ?
JSON Diff est une comparaison structurelle de deux documents JSON qui respecte le modèle de données JSON — les clés sont non ordonnées, les types sont stricts, et les tableaux peuvent être ordonnés ou indexés par clé. Contrairement à un diff texte (qui compare des lignes et signale les réordonnances de clés ou les espaces blancs comme des différences), un diff JSON produit des résultats sémantiquement pertinents.
La forme canonique lisible par machine est JSON Patch (RFC 6902), un tableau d'opérations ordonné (add, remove, replace, move, copy, test) qui transforme un document en un autre. Les chemins utilisent JSON Pointer (RFC 6901). Étroitement lié : JSON Merge Patch (RFC 7396) — plus simple mais ne peut pas distinguer « supprimer une clé » de « mettre une clé à null ». Cet outil génère du RFC 6902.
L'égalité profonde sur le JSON en JavaScript est plus difficile qu'il n'y paraît. JSON.stringify(a) === JSON.stringify(b) échoue sur les réordonnances de clés, et trompe sur -0 vs 0 (les deux se sérialisent en "0"). Un diff correct doit parcourir les deux arbres en parallèle en utilisant l'union des ensembles de clés, distinguer null du manquant via l'opérateur 'in', et décider ce que « égal » signifie pour les nombres (Object.is par défaut, epsilon pour la tolérance).
Cet outil s'exécute entièrement dans votre navigateur. Les entrées ne quittent jamais votre machine. Sûr pour les réponses API, les schémas internes et les configurations propriétaires.
Vous travaillez avec des outils JSON adjacents ? Formatez avec JSON Formatter ; convertissez avec JSON to YAML et YAML to JSON.
// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';
// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)
// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences
// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }] Fonctionnalités clés
Vue côte à côte + JSON Patch
Deux vues depuis un seul diff : mise en évidence visuelle pour la révision, patch RFC 6902 pour l'automatisation.
Ignorer les champs bruyants
Les préréglages en un clic suppriment /createdAt, /updatedAt, /*Id, /*At, requestId, traceId. Patterns JSON Pointer étendus personnalisés supportés.
Correspondance des tableaux par clé
Comparez des tableaux d'objets par un champ id plutôt que par index — pour les envs K8s, les entrées package-lock, ou toute liste logiquement non ordonnée.
Strict sur les types par défaut
1 ≠ "1". null ≠ manquant. Détectez la dérive de sérialisation backend dès qu'elle apparaît dans un test fixture.
100% basé sur le navigateur
Les entrées ne quittent jamais votre machine. Aucun envoi, aucun localStorage du JSON, aucune analyse de ce que vous collez.
Partage du lien, pas des données
Lien de partage n'écrit que votre configuration dans l'URL. Vos entrées JSON restent locales.
Exemples
API Response Regression
{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}} {"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}} Two changes (name + createdAt). Add /user/createdAt to Ignore paths and only the name change remains.
Config File Audit (Key Reorder)
{"a":1,"b":2,"c":3} {"c":3,"a":1,"b":2} Same data, different key order. JSON Diff treats key order as semantically irrelevant — diff is empty.
Array of Objects (Match by Key)
[{"id":1,"qty":3},{"id":2,"qty":5}] [{"id":2,"qty":5},{"id":1,"qty":4}] Switch Array mode to 'Match by key' with key=id. Without alignment every element looks changed; with alignment only qty on id=1 changes.
JSON Patch Output (RFC 6902)
{"items":[{"id":1,"price":29.99}]} {"items":[{"id":1,"price":24.99}]} Switch to the JSON Patch tab to get [{"op":"replace","path":"/items/0/price","value":24.99}] you can apply with fast-json-patch.
Comment utiliser
- 1
Collez les deux documents JSON
Collez le JSON original (gauche) et modifié (droite). Le diff live s'affiche pendant la saisie ; les grandes entrées (>200 Ko) basculent vers un bouton Diff manuel.
- 2
Filtrez le bruit
Cliquez sur un préréglage (Timestamps / IDs / Trace) ou collez des patterns JSON Pointer étendus dans « Ignorer les chemins » pour exclure les champs non pertinents.
- 3
Choisissez la vue dont vous avez besoin
Côte à côte pour la révision humaine, JSON Patch (RFC 6902) pour les opérations applicables par machine. Utilisez Lien de partage pour envoyer la configuration à un collègue.
Pièges courants du diff
Bruit d'ordre des clés (symptôme de diff texte)
Si votre outil de diff signale {"a":1,"b":2} vs {"b":2,"a":1} comme différents, il fait un diff de lignes, pas un diff JSON. Les clés JSON sont non ordonnées — cet outil ignore automatiquement l'ordre des clés.
diff a.json b.json # text diff: 'everything changed'
JSON Diff (this tool): 0 differences
Confusion null vs manquant
{"a":null} et {} ne sont pas identiques. Les traiter comme égaux masque de vrais bugs backend.
{"a": null} == {} # collapsed by some tools {"a": null} ≠ {} # type-strict diff Ordre des tableaux sans alignement par clé
[{id:1},{id:2}] vs [{id:2},{id:1}] ne représente pas « deux changements » pour un ensemble logique. Le diff séquentiel le signale ainsi ; passez à Correspondance par clé.
Sequential diff: 4 modified
Match by key (id): 0 differences
Dérive de type (nombre vs chaîne)
Les backends sérialisent parfois les ID de manière inconsistante — 42 vs "42". L'outil les signale comme modifications de « type » pour que vous puissiez détecter la dérive tôt.
{"id": 42} vs {"id": "42"} # serialization bug Diff reports 'modified (type)' with both values
Précision des nombres flottants
0.1 + 0.2 !== 0.3 en IEEE 754. Avec tolerance=0 (défaut), cela est signalé. Définissez la tolérance à 1e-9 si vous souhaitez une équivalence numérique.
tolerance=0: 0.30000000000000004 ≠ 0.3
tolerance=1e-9: equal
Bruit d'horodatage et d'UUID
createdAt, updatedAt, requestId, traceId changent à chaque requête. Utilisez les préréglages de chemins ignorés pour les supprimer.
Diff: 47 modifications (45 are timestamps)
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes
Cas d'usage courants
- Régression de réponse API
- Comparez les réponses staging et production ; ignorez les horodatages et les ID de requête pour ne faire ressortir que les changements de payload significatifs.
- Échecs de tests snapshot CI
- Collez le réel vs l'attendu d'un snapshot Jest/Vitest en échec. Filtrez le bruit et trouvez le vrai changement en quelques secondes.
- Conflits package-lock / yarn.lock
- Résolvez les conflits de fusion en alignant les dépendances sur le nom ; l'ordre des clés et les champs non liés cessent d'être du bruit.
- Audit des valeurs K8s / Helm
- Faites correspondre envs, volumeMounts et ports par nom. Détectez les réordonnances non intentionnelles vs les vraies modifications de config.
- Couverture de traduction i18n
- Comparez structurellement en.json avec zh.json pour trouver les clés de traduction manquantes ou supplémentaires sans bruit de valeur.
- Révision du plan Terraform / CDK
- Comparez la sortie du plan entre les exécutions ; la tolérance numérique gère l'arithmétique en virgule flottante, les chemins ignorés suppriment les ARN et les horodatages.
Détails techniques
- Sortie de patch conforme RFC 6902
- Génère des opérations JSON Patch valides (add/remove/replace) avec des chemins RFC 6901. Vérifié contre fast-json-patch@3.x et les packages npm rfc6902.
- Traversée itérative
- Traversée à pile explicite (sans récursion) limitée à 100 000 nœuds et une profondeur de 64 pour prévenir le débordement de pile sur des entrées adverses.
- Égalité numérique Object.is
- La tolérance numérique par défaut est 0 — utilise Object.is donc -0 et +0 sont distingués. Définissez la tolérance > 0 pour l'égalité basée sur epsilon.
Bonnes pratiques
- Filtrez avant de réviser
- Ajoutez d'abord les chemins à ignorer (horodatages, ID, champs de trace), puis lisez le diff. Réviser des diffs bruyants entraîne l'œil à sauter — et à manquer — les vrais changements.
- Correspondance par clé pour les ensembles logiques
- Si votre tableau représente un ensemble non ordonné (envs, utilisateurs, dépendances), utilisez Correspondance par clé. Le diff séquentiel sur les ensembles logiques est presque toujours incorrect.
- Partagez le lien, pas les entrées
- Utilisez Lien de partage pour envoyer à un collègue votre configuration de filtre — ne collez jamais de JSON sensible dans des documents partagés. L'URL ne contient que la configuration.
Foire aux questions
Pourquoi mon diff affiche-t-il tout comme modifié alors que je n'ai changé qu'un seul champ ?
Comment ignorer les horodatages et les ID dans un diff JSON ?
Quelle est la différence entre JSON Patch et un diff visuel ?
JSON diff traite-t-il null et les clés manquantes de la même façon ?
Comment les tableaux sont-ils comparés — par index ou par clé ?
Puis-je exporter le diff en tant que RFC 6902 JSON Patch ?
JSON Patch est-il identique à JSON Merge Patch (RFC 7396) ?
Comment comparer deux gros fichiers JSON (>10 Mo) ?
L'outil envoie-t-il mon JSON à un serveur ?
Pourquoi 42 diffère-t-il de "42" dans le diff ?
Puis-je comparer du JSON avec des commentaires (JSONC) ou des virgules finales ?
Comment comparer des tableaux imbriqués d'objets par une clé comme id ?
Le diff gère-t-il la précision des nombres flottants (0.1 + 0.2) ?
Outils connexes
Voir tous les outils →Décodeur et Encodeur Base64
Encodage et formatage
Décodez et encodez en Base64 en ligne gratuitement. Conversion en temps réel, support UTF-8 et émojis. 100 % privé, dans votre navigateur.
Formateur et Validateur JSON
Encodage et formatage
Formatez, validez et embellissez vos JSON dans le navigateur. Validation syntaxique, détection d'erreurs, minification et copie en un clic. 100 % privé.
Convertisseur JSON vers YAML
Encodage et formatage
Collez du JSON, obtenez du YAML instantanément. En direct dans le navigateur. K8s/Compose, 2/4 espaces, guillemets sécurisés Norway. 100 % privé, sans envoi.
Encodeur et Décodeur URL avec Analyseur de Structure Intégré
Encodage et formatage
Décodez et encodez vos URLs instantanément. Analyseur intégré : protocole, hôte, chemin et paramètres. Modes encodeURI/encodeURIComponent. 100 % privé.
Convertisseur YAML vers JSON
Encodage et formatage
Collez du YAML, obtenez du JSON instantanément. En direct dans le navigateur. Manifestes K8s, specs OpenAPI et valeurs Helm supportés. 100 % privé, sans envoi.
Convertisseur de Base — Binaire, Hex, Décimal & Octal
Outils de conversion
Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.