JSON outils · 6 minutes de lecture
Schéma JSON à JSON : de l'échantillon de charge utile au
Une conversion de schéma JSON en JSON prend un exemple qui fonctionne et produit une description lisible par machine de sa forme. Cette description peut valider de futures charges utiles, générer de la documentation ou piloter du code saisi, mais uniquement si vous traitez le schéma généré comme une première ébauche. L'inférence voit un échantillon, et un échantillon est un menteur très confiant.
Mis à jour
Quelle inférence peut et ne peut pas voir
À partir d'un seul document, un bon convertisseur dérive avec précision les types, l'imbrication, les formes d'éléments de tableau et les noms de propriétés. Ce qu’il ne peut pas déduire, c’est l’intention. Il ne sait pas qu'un champ est facultatif parce que cet enregistrement particulier l'inclut, qu'une chaîne est une adresse e-mail, qu'un nombre est un entier positif ou qu'une valeur provient d'un ensemble fixe. Tout ce qui en dérive est donc marqué `required`, ce qui est la bonne valeur par défaut pour un projet de contrat et une mauvaise chose à expédier sans examen.
Renforcement du schéma généré
- Comparez deux ou trois échantillons réels : les clés qui manquent dans un échantillon devraient disparaître de `required`.
- Ajoutez `format` là où la signification est connue — `date-time`, `email`, `uri`, `uuid`, `ipv4`.
- Transformez les ensembles ouverts en valeurs `enum` lorsque le champ a réellement un vocabulaire fixe, tel qu'un statut ou une région.
- Resserrez les nombres avec `minimum`, `maximum` et `multipleOf` afin qu'une quantité négative ne puisse pas être validée.
- Ajoutez `additionalProperties: false` uniquement lorsque des clés inconnues doivent être rejetées — sinon laissez le schéma ouvert pour une compatibilité ascendante.
Ce qui est requis, c'est une promesse, pas une observation. Marquer un champ obligatoire parce que votre échantillon le contenait est la manière la plus courante pour un schéma déduit de rompre une intégration réelle.
Où le schéma gagne sa place
La valeur pratique apparaît aux limites : valider la charge utile d'un webhook avant de lui faire confiance, vérifier les fichiers des appareils dans CI afin que les tests échouent sur des données mal formées plutôt que sur des erreurs nulles confuses, documenter une réponse API pour les personnes qui ne liront jamais le code du serveur et générer des clients typés. Un schéma JSON est également le moyen le moins coûteux d'empêcher un changement de configuration de modifier silencieusement une réponse publique, car le validateur l'attrape au moment de la construction plutôt qu'en production.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["id", "email"],
"properties": {
"id": { "type": "string", "format": "uuid" },
"email": { "type": "string", "format": "email" },
"plan": { "type": "string", "enum": ["free", "pro", "team"] }
}
}
Gardez-le dans le contrôle de version
Les schémas générés dérivent dès que personne ne les possède. Validez le fichier renforcé à côté du code qui produit les données, référencez-le à partir du validateur dans CI et régénérez-le uniquement lorsque le contrat change véritablement - en traitant le schéma comme la source de vérité pour la forme et l'échantillon comme preuve, et non l'inverse.
Inférence dans le navigateur
Les charges utiles réelles regorgent d'identifiants, d'e-mails et de jetons, donc une conversion de schéma JSON en JSON qui télécharge l'échantillon transmet les données de production pour une opération purement mécanique. L'inférence locale conserve la charge utile dans l'onglet, vous permet de coller un enregistrement client sans arrière-pensée et fonctionne avec le réseau coupé.
Schéma JSON à JSON — questions fréquemment posées
Pourquoi chaque champ apparaît-il comme requis ?
Parce que l'inférence voit un échantillon et cet échantillon contient tous les champs. Requis signifie garantie, le schéma généré est donc un point de départ : comparez quelques échantillons, puis supprimez les clés parfois absentes et ajoutez des contraintes `format` ou `enum` là où vous connaissez les vraies règles.
Quel brouillon de schéma JSON dois-je utiliser ?
Projet 2020-12 pour les nouveaux travaux — il s'agit de la spécification actuelle et est bien prise en charge par les validateurs tels que l'ajv. Si vous effectuez l'intégration avec un système épinglé sur draft-07, continuez à générer des documents draft-07 ; les deux diffèrent principalement par les mots-clés plus récents dont vous n’aurez probablement pas besoin.
Un schéma JSON peut-il également valider des tableaux ?
Oui. L'inférence de tableau produit un schéma `items` décrivant la forme de l'élément et une forme d'élément unique peut être vérifiée avec `prefixItems` dans les brouillons modernes. Fusionnez deux échantillons avec des formes d'éléments différentes et vous verrez où un `oneOf` est nécessaire.
Outils mentionnés dans cet article
Plus d'articles à lire
6 minutes de lecture
JSON à TypeScript : types qui correspondent à la réalité
Convertissez les interfaces JSON en TypeScript à partir d'une réponse réelle API (clés facultatives, unions nulles, types imbriqués) et empêchez les types générés de dériver.
6 minutes de lecture
Formateur JSON : joli, minifié et réellement valide
Un formateur JSON qui imprime, réduit et valide avec précision les emplacements d'erreur, ainsi que les cinq erreurs de syntaxe derrière presque toutes les erreurs JSON invalides.
6 minutes de lecture
JSON diff : comparer les données telles qu'elles sont
Comparez deux charges utiles JSON avec une différence structurelle JSON qui ignore l'ordre des clés et les espaces, met en évidence les valeurs déplacées et montre pourquoi les différences de texte induisent en erreur.
- Article plus long à lire : JSON à TypeScript : les types qui disent la vérité