Générateur de schéma JSON, gratuit

Collez du JSON pour générer automatiquement un JSON Schema.

Aucune donnée ne quitte votre appareil

Comment utiliser

  1. Collez un objet ou un tableau JSON dans la zone d'entrée.
  2. Activez les options : inclure les tableaux « required » ou les « examples » issus de vos valeurs.
  3. Cliquez sur Générer le schéma pour créer un JSON Schema (Draft 2020-12).
  4. Copiez ou téléchargez le schéma généré.

Questions fréquentes

Quelle version de JSON Schema est générée ?

Le générateur produit du JSON Schema Draft 2020-12 (https://json-schema.org/draft/2020-12/schema), le dernier brouillon stable.

Gère-t-il les objets et tableaux imbriqués ?

Oui. Le générateur traite récursivement les objets et tableaux imbriqués. Pour les tableaux, il infère le schéma à partir du premier élément.

Puis-je éditer le schéma généré ?

La sortie est un point de départ. Vous voudrez peut-être ajouter des contraintes comme minLength, minimum, pattern ou enum selon vos besoins.

À quoi sert JSON Schema

JSON Schema est une façon déclarative de décrire à quoi un document JSON devrait ressembler : quelles propriétés il a, quels types ces propriétés portent, ce qui est requis vs optionnel et quelles valeurs sont valides. C'est l'équivalent côté JSON de XSD pour XML ou d'une définition de table de base de données. Le projet officiel vit à json-schema.org.

Là où vous le rencontrerez :

Les drafts que vous verrez en pratique

La spécification de JSON Schema a été publiée comme une série de drafts. Le draft stable actuel est 2020-12 (selon la page de spec officielle : « The current version is 2020-12 »). Les drafts que vous pourriez rencontrer :

En cas de doute, choisissez le draft qui correspond à votre validateur. AJV (le validateur JavaScript le plus populaire) supporte les Drafts 04, 06, 07, 2019-09 et 2020-12 avec opt-in explicite. jsonschema en Python fait pareil. Si vous ne savez pas ce que veut votre consommateur en aval, 2020-12 est un défaut sûr pour du nouveau travail.

Les types intégrés

JSON Schema décrit sept types de base correspondant aux sortes de valeurs JSON :

typeValeur JSONMots-clés courants
string"hello"minLength, maxLength, pattern, format
number42, 3.14minimum, maximum, exclusiveMinimum, multipleOf
integer42Sous-ensemble de number ; pas de partie fractionnaire.
booleantrue / falseAucune contrainte additionnelle.
nullnullType distinct ; explicite quand les nulls sont valides.
array[…]items, minItems, maxItems, uniqueItems
object{…}properties, required, additionalProperties

Les mots-clés de composition vous permettent de mélanger : oneOf (exactement un), anyOf (au moins un), allOf (tous), not (l'inverse). Plus enum pour une liste finie de valeurs autorisées et const pour une seule valeur fixe.

Ce qu'un schéma auto-généré peut et ne peut pas vous dire

Inférer un schéma à partir d'un seul exemple JSON est puissant mais limité. Le générateur peut détecter :

Il ne peut pas détecter :

Traitez la sortie comme un point de départ fait à 70 %. Les ajouts précieux (quels champs sont réellement requis, quels formats de chaîne s'appliquent, quelles plages de valeurs sont autorisées, ce que chaque champ signifie) sont l'étape de curation humaine.

Deux pièges subtils à connaître

JSON Schema vs Zod / Joi / Yup vs types TypeScript

Plusieurs technologies se chevauchent avec le rôle de JSON Schema ; chacune a un sweet spot différent :

Si votre schéma doit être consommé par plusieurs langages ou par des outils (IDEs, tooling OpenAPI, générateurs de code), JSON Schema est le bon foyer. Si vous restez dans un seul langage, l'option native de ce langage est généralement plus agréable à écrire.

Cas d'usage courants

Erreurs courantes

  1. Traiter le schéma auto-généré comme la spec finale. C'est un point de départ. Ajoutez des indices de format, marquez les champs vraiment optionnels, ajoutez de la documentation, fixez les plages de valeurs.
  2. Manquer la déclaration $schema. Les validateurs l'utilisent pour savoir quel draft appliquer. Incluez-la toujours en haut du schéma.
  3. Traiter required comme un attribut par propriété. Contrairement à XSD ou aux schémas Mongoose, le required de JSON Schema est un tableau au niveau de l'objet parent listant les noms des propriétés requises.
  4. Oublier additionalProperties: false quand vous voulez une validation stricte. Le défaut est true, ce qui signifie que les clés inconnues sont silencieusement autorisées.
  5. Confondre enum avec examples. enum = la liste des valeurs autorisées (validation). examples = des valeurs d'exemple pour la documentation seulement (aucun effet de validation).
  6. Supposer que format est appliqué. Par défaut en Draft 2020-12 c'est une annotation, pas une assertion ; votre regex e-mail ne tournera pas tant que vous n'optez pas dedans.
  7. Inférer l'optionalité depuis un seul exemple. Chaque clé de votre exemple devient requise par défaut. Les vraies specs ont presque toujours des champs optionnels ; retirez-les du tableau required dans le cadre de la curation.

Questions fréquentes supplémentaires

Le schéma fonctionnera-t-il avec OpenAPI 3.1 ?

Oui. OpenAPI 3.1 (sorti en février 2021) a aligné son langage de schéma entièrement avec JSON Schema Draft 2020-12, qui est ce que ce générateur émet. Déposez le schéma dans components.schemas dans votre document OpenAPI et référencez-le via $ref. L'ancien OpenAPI 3.0 utilisait un sous-ensemble antérieur ; vous pourriez avoir à ajuster si vous ciblez 3.0.

Puis-je générer des types dans mon langage à partir de ce schéma ?

Oui. quicktype génère TypeScript, Go, Python, Java, C#, Swift, Kotlin, Rust, Elm et d'autres à partir d'un JSON Schema. json-schema-to-typescript est une alternative spécifique à JS. La plupart des langages modernes ont au moins un outil schema-to-types ; le schéma généré sert d'entrée à tous.

Quelle est la différence entre $defs et definitions ?

Les deux sont des endroits pour mettre des sous-schémas réutilisables que vous pouvez $ref ailleurs dans le document. definitions est le nom legacy, utilisé en Drafts 04, 06 et 07. $defs est le nom actuel, introduit en Draft 2019-09 et continuant en 2020-12. Fonctionnellement équivalents, mais utilisez $defs pour du nouveau travail.

Mon JSON est-il envoyé quelque part ?

Non. La génération de schéma tourne entièrement dans votre navigateur. Le JSON collé est parsé localement, parcouru et émis comme un schéma dans la zone de texte de sortie. Rien n'est téléversé vers un serveur, journalisé ou conservé après la fermeture de l'onglet. Cela compte parce que les exemples JSON contiennent souvent des données réelles (enregistrements clients, réponses d'API internes, infos employés) que vous ne voulez pas voir transiter par un tiers.

Pourquoi le schéma de mon tableau ne décrit-il que le premier élément ?

L'inférence depuis un seul exemple traite les tableaux comme homogènes : elle regarde le premier élément et suppose que le reste correspond. Si votre vrai tableau peut contenir des formes différentes, vous devrez écrire les items comme { "oneOf": [...] } à la main. Ou faire tourner le générateur sur chaque variante séparément et combiner les schémas.

Devrais-je utiliser un générateur du tout, ou écrire le schéma à la main ?

Pour un petit schéma que vous contrôlez de bout en bout, l'écrire à la main vous apprend la spec plus vite. Pour une grosse réponse d'API avec des dizaines d'objets imbriqués, générer vous amène à un brouillon en quelques secondes et vous passez le temps gagné à curer les contraintes, descriptions et tableaux required. La plupart des développeurs en activité font les deux : générer, puis curer.

Outils associés

Formatage et validation JSON en ligne, gratuits Comparateur JSON, gratuit Convertisseur JSON → YAML, gratuit