ForHosting KIT · Données et fichiers

Comparer des objets JSON et repérer chaque modification

Placez côte à côte l'ancienne et la nouvelle version d'un enregistrement de données et obtenez les seules vraies différences : dans l'exemple, 2 ajouts, 1 suppression et 2 modifications, 5 au total, sans tenir compte des espaces ni de l'ordre des clés. Gratuit dans votre navigateur.

  • Gratuit
  • Fonctionne dans votre navigateur
  • Sans inscription
  • Vos données restent sur votre appareil
Utilisez-le depuis WebAPIE-mailTelegramApp bientôt

Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.

Les tableaux restent ordonnés et sont comparés en bloc. Le calcul est déterministe, sans accès réseau, et refuse au niveau racine les tableaux, primitives et valeurs null.

Comparer les données, pas le texte

Une comparaison de texte fait paraître énorme une petite mise à jour, car l'indentation, l'ordre des clés et d'autres détails de mise en forme détournent l'attention des données. Cet outil lit les deux versions comme des données : seules les vraies différences comptent, et un contenu identique avec d'autres espaces ou un autre ordre donne trois listes vides. Quand une section existe des deux côtés, la comparaison y entre et pointe la donnée la plus profonde qui a changé, comme /profile/active dans l'exemple. Les listes sont comparées en bloc : ajouter editor à roles produit une seule modification, avec l'ancienne et la nouvelle liste en entier.

Quand s'en servir et ce qu'il faut regarder

Avant de publier une nouvelle configuration, une relecture peut bloquer le changement si des réglages protégés figurent parmi les suppressions ; une vérification automatique peut confirmer que seuls les chemins approuvés ont changé, et un audit peut conserver la différence compacte plutôt que deux gros documents. Regardez toujours la catégorie, pas seulement le chemin : retirer une valeur et en ajouter une ailleurs n'a pas le même sens que modifier une valeur existante. Les totaux résument le résultat, et les deux versions doivent être des enregistrements nommés au premier niveau, pas une liste ni une valeur isolée.

Comment lire la liste des différences

Le résultat répartit les écarts entre trois collections : ajouts, suppressions et modifications. Un ajout n’existe que dans le nouvel objet, une suppression uniquement dans l’original, et une modification contient les valeurs avant et après. Une barre présente dans une clé devient ~1 et un tilde devient ~0, ce qui évite toute confusion avec les niveaux imbriqués.

Le parcours trié garantit une réponse stable. Le bloc counts résume chaque catégorie et le total. Trois listes vides signifient que les objets sont structurellement identiques, même si leur texte d’origine utilise une autre indentation ou un ordre de clés différent.

Gestion des objets imbriqués et des tableaux

Lorsqu’une même clé contient un objet des deux côtés, la comparaison descend jusqu’à la propriété précise qui diffère. Si seul profile.active change, le chemin rendu est /profile/active. Une clé entièrement absente d’un côté est toutefois signalée une seule fois avec sa valeur complète, sans développer tous ses descendants.

Les primitives et null sont comparés directement, et un changement de type constitue aussi une modification.

Contrôler une nouvelle configuration

Comparez la configuration déployée à la candidate sans bruit dû aux espaces ou à l’ordre des clés.

Protéger les réglages approuvés

Contrôlez les chemins en CI et bloquez le déploiement si un réglage protégé change.

L’ordre des clés compte-t-il comme modification ?

Non. La comparaison porte sur les clés et les valeurs, pas sur leur ordre de sérialisation.

Comment les tableaux sont-ils comparés ?

Ils sont ordonnés et comparés en bloc. Toute insertion, suppression, modification ou permutation signale le tableau.

Comment lire le chemin indiqué pour chaque différence ?

Le chemin commence par une barre oblique et descend d'un niveau à chaque barre : /profile/name désigne le nom rangé dans profile. Une barre oblique à l'intérieur d'un nom s'écrit ~1 et un tilde s'écrit ~0, pour qu'aucun nom ne soit confondu avec un niveau.

Une modification dans une section apparaît-elle à part ?

Oui. Quand les deux versions contiennent la même section, la comparaison y entre et désigne la donnée la plus profonde qui diffère. Dans l'exemple, seul active a changé dans profile : le résultat indique /profile/active et non le profil entier.

Que se passe-t-il si une section entière est nouvelle ?

Elle est notée une seule fois, avec tout son contenu, au lieu d'une entrée par donnée qu'elle contient. Une section de configuration tout juste ajoutée se lit ainsi comme un seul événement, et non comme une longue liste d'ajouts épars.

Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.

POSThttps://api.kit.forhosting.com/data/diff-json-objects

Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.

curl -X POST https://api.kit.forhosting.com/data/diff-json-objects \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"before":{"name":"Ada","profile":{"active":true,"score":8},"roles":["reader"]},"after":{"name":"Ada","profile":{"active":false,"score":8,"city":"London"},"roles":["reader","editor"]}}'
{
  "before": {
    "name": "Ada",
    "profile": {
      "active": true,
      "score": 8
    },
    "roles": [
      "reader"
    ]
  },
  "after": {
    "name": "Ada",
    "profile": {
      "active": false,
      "score": 8,
      "city": "London"
    },
    "roles": [
      "reader",
      "editor"
    ]
  }
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.diff_json_objects",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.

par requête$0.002

Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.

max_mb25
HTTPCodeSignification
401unauthorizedClé API absente ou invalide : vérifiez l’en-tête Authorization.
402insufficient_balanceSolde insuffisant : rechargez votre compte pour lancer cette tâche.
404unknown_typeType de tâche inconnu : vérifiez le champ type de votre requête.
429rate_limitedTrop de requêtes : ralentissez la cadence, puis réessayez.

Une comparaison textuelle rend parfois une petite mise à jour JSON illisible : indentation, ordre des clés et formatage masquent les données réellement modifiées. Cet outil compare les valeurs analysées, classe les clés ajoutées, supprimées et modifiées, parcourt les objets imbriqués communs et fournit un chemin JSON Pointer sans ambiguïté.

Interpréter une différence JSON structurelle

Chaque entrée porte un chemin JSON Pointer commençant par une barre. Ainsi, /profile/name désigne name dans profile.

Gestion des objets imbriqués et des tableaux

Les tableaux sont des valeurs JSON ordonnées comparées en bloc : insertion, suppression, déplacement ou modification d’un élément signale la propriété entière comme modifiée. Seules les deux valeurs racines obéissent à une contrainte stricte : before et after doivent être des objets JSON non nuls.

Exploiter le résultat en révision et en automatisation

Vous pouvez bloquer un déploiement si un réglage protégé disparaît, vérifier que seules des routes autorisées changent ou conserver une différence compacte dans un audit. Pour un tableau, appliquez ensuite vos propres règles métier aux valeurs complètes. Une racine invalide renvoie une erreur explicite plutôt qu’une différence vide trompeuse. Placez l’objet original dans before et la version proposée dans after. L’outil web travaille localement ; une requête API coûte $0.002 et produit la même structure déterministe. Le formatage et l’ordre des clés ne créant aucun faux positif, l’outil convient aux configurations, webhooks, indicateurs, permissions et réponses normalisées. Interprétez les chemins comme des JSON Pointer et tenez compte de leur catégorie.

Auditer l’évolution des webhooks

Consignez les champs imbriqués apparus, disparus ou modifiés entre deux exemples normalisés.

Quel format de chemin le résultat emploie-t-il ?

Chaque chemin est un JSON Pointer de type RFC 6901 ; les barres des clés deviennent ~1 et les tildes ~0.

Puis-je comparer deux tableaux racines ?

Non. before et after doivent être des objets JSON non nuls ; une autre racine provoque une erreur de saisie.

Quel est le prix d’une requête API ?

L’outil web fonctionne gratuitement en local. Chaque requête API applique le tarif de base publié de $0.002.

Consulter la documentation complète du KIT →