Comment comparer du JSON et consulter des valeurs par leur chemin

Distinguez mise en forme et modification des données, utilisez JSON Pointer et préparez des tableaux de contrôle.

Guide pratiqueMis à jour le Temps de lecture estimé: 4 min
Sur cette page

Décidez si vous comparez la mise en page ou les données

Deux documents JSON peuvent contenir les mêmes données avec des indentations différentes. La comparaison analyse les valeurs : l’ordre des propriétés des objets ne compte pas, mais celui des éléments des tableaux compte. La mise en forme facilite la lecture sans vérifier que les champs respectent le schéma attendu par l’application de destination.

Utiliser des versions clairement identifiées et conserver ce qui est avant et ce qui est après. Inspectez un changement connu pour comprendre le rapport. La chaîne "2" diffère du nombre 2. Si un code tel que "001" doit conserver les zéros principaux, conservez-le comme une chaîne plutôt que de le transformer en un nombre simplement pour simplifier la comparaison. Ce choix affecte à la fois l'interprétation et la préservation.

Lire les chemins dans le rapport de différence

Chaque différence montre un JSON Pointer chemin et si une valeur a été ajoutée, supprimée ou modifiée. En /users/0/name, 0 sélectionne le premier élément de tableau. Il est différent de la position d'une page PDF ou d'une étiquette de table imprimée : les index des tableaux commencent à zéro plutôt qu'à un.

Les clés contenant / utilisent ~1 et celles contenant ~ utilisent ~0. Le chemin /a~1b consulte une propriété nommée a/b. Un chemin vide renvoie le document entier. JSON Pointer ne prend pas en charge JSONPath, les caractères génériques ni les fragments URI. Saisissez un chemin exact et vérifiez qu’il existe avant d’utiliser la valeur extraite.

Comprendre les intrants rejetés et les limites

La comparaison et la recherche de pointeur rejettent les clés en double, les entiers en dehors de la plage de sécurité et l'imbrication au-delà de cent niveaux. Cacher des espaces blancs ne résout pas ces problèmes. Si un grand identifiant doit être du texte, sa représentation source doit le conserver comme une chaîne de caractères ; accepter un nombre arrondi ne restaure pas l'identifiant original.

La comparaison accepte un million de caractères par document et jusqu'à mille différences. Diviser les grandes structures en unités significatives et enregistrer les fragments qui ont été comparés. Un chemin manquant diffère d'une propriété contenant null. Inspectez à la fois la source et le chemin pour distinguer une erreur de sélection d'une valeur vide valide avant d'interpréter la sortie.

Préparer des tables d'examen sans perdre le contexte

La table JSON to Markdown accepte un tableau d'objets et collecte les clés de chaque ligne. Les propriétés manquantes et null produisent des cellules vides, tandis que les structures imbriquées apparaissent sous forme de JSON compact. Les caractères spéciaux sont échappés et les sauts de ligne apparaissent comme . Cela soutient l'examen humain, mais ne préserve pas toutes les distinctions en tant qu'exportation réversible.

Pour les sources CSV n'ayant besoin que d'un séparateur différent, utilisez Modifier le délimiteur CSV. Le remplacement des virgules par du texte ordinaire peut casser les cellules citées. Vérifiez les en-têtes, les zéros et une cellule contenant la ponctuation. Enregistrez le JSON original à côté de votre rapport de différence ou de votre tableau afin que les ambiguïtés puissent être examinées par rapport à la source complète plutôt qu'à un affichage simplifié.

À VOUS DE JOUER

Une valeur modifiée et une clé contenant une barre oblique

Collez le premier objet en tant que document A et le second en tant que B dans Compare JSON. L’ordre des propriétés diffère et le nom du premier utilisateur a changé. Comparez, puis interrogez le deuxième document dans JSON Pointer.

Before: {"users":[{"name":"Ana"}],"a/b":2}
After: {"a/b":2,"users":[{"name":"Luis"}]}

Une différence apparaît au chemin /users/0/name : Ana devient Luis. Changer l’ordre des propriétés ne crée aucune différence supplémentaire. Consulter /a~1b renvoie 2.

Requête /users/0/name pour obtenir Luis. Le chemin d'accès /users/1/name échoue car il n'y a pas de second utilisateur : absence est différente d'une valeur null.