Générateur de schéma JSON

Collez un ou plusieurs échantillons JSON et le générateur infère un schéma JSON que vous pouvez utiliser pour valider de nouvelles charges utiles. Détecte les types, marque les champs comme requis lorsqu’ils apparaissent dans chaque échantillon, infère des énumérations lorsque les valeurs proviennent d’un petit ensemble fermé, et produit une sortie conforme au brouillon JSON Schema 2020-12.

Comment générer un schéma JSON

  1. 1

    Collez des documents échantillons

    Une ou plusieurs charges utiles réelles, plus il y a de variété, plus le schéma inféré est précis.

  2. 2

    Choisissez le brouillon

    Brouillon 2020-12 (actuel), brouillon 07 (largement supporté), ou brouillon 04 (OpenAPI hérité).

  3. 3

    Ajustez l'inférence

    Activez l'inférence d'énumération, la stratégie des champs requis (intersection vs union), et si tous les champs doivent être marqués comme `requis` lorsqu'un seul échantillon est donné.

  4. 4

    Générer

    Le schéma est émis avec `$schema`, `title`, `type`, `properties`, et des `$ref` imbriqués pour les sous-objets répétés.

Ce que l’inférence fait bien

  • Types : chaîne, nombre, entier, booléen, null, tableau, objet.
  • Nullabilité : un champ qui est null dans un échantillon et une chaîne dans un autre devient ["string", "null"].
  • Éléments de tableau : les tableaux homogènes produisent un seul schéma items ; les tableaux hétérogènes produisent prefixItems.
  • Énumérations : si toutes les valeurs observées proviennent d’un petit ensemble (configurable, par défaut 10 valeurs distinctes), émet une enum.
  • Requis : avec plusieurs échantillons, l’intersection des clés devient requis ; avec un échantillon, toutes les clés sont requises à moins que vous ne choisissiez de ne pas les inclure.
  • Formats : les chaînes correspondant aux dates ISO-8601, aux e-mails ou aux URI obtiennent un format inféré.

Ce que l’inférence ne peut pas savoir

  • Intention vs exemple : un échantillon age: 25 infère type: integer, mais ne peut pas savoir que vous acceptez également null. Passez plusieurs échantillons qui couvrent les cas limites.
  • Contraintes : minLength, maximum, pattern, vous devez les ajouter manuellement. L’inférence ne devine pas les limites à partir des échantillons.
  • Logique métier : “exactement un de ces trois champs doit être défini” nécessite oneOf, non inférable.
  • Références : le générateur émet un schéma plat. Si vous souhaitez factoriser des formes répétées dans $defs, faites-le après la génération.

Exemple de sortie

À partir d’un seul échantillon :

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Le schéma inféré (brouillon 2020-12) :

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Erreurs courantes

  • Inférer à partir d’un seul échantillon. Le schéma sera trop ajusté, chaque champ devient requis, aucune tolérance pour null. Alimentez toujours au moins 5-10 échantillons variés.
  • Utiliser integer quand vous vouliez dire number. Si un échantillon a une décimale, le type inféré devient number ; si tous sont entiers, il devient integer. Pour les champs qui pourraient être l’un ou l’autre, incluez un échantillon décimal.
  • Oublier les champs optionnels. Un champ présent dans 4 des 5 échantillons mais manquant dans 1 devient optionnel, intentionnel. Si les 5 échantillons l’incluent, le schéma le marquera comme requis même s’il est en réalité optionnel dans votre API.

Questions fréquentes

Plus il y en a, mieux c’est, mais 5-10 échantillons variés produisent généralement un schéma raisonnable. Avec un seul échantillon, chaque champ devient requis et la nullabilité ne peut pas être inférée, fournissez toujours plusieurs variantes si vous le pouvez.

Brouillon 2020-12 par défaut. Les brouillons 07 et 04 sont disponibles pour la compatibilité OpenAPI 3.0 (qui utilise un sous-ensemble de brouillon 05/07).

Non. Inférer des contraintes sensées à partir des échantillons sur-ajusterait le schéma. Ajoutez minLength, maximum, pattern, etc. manuellement après la génération en fonction de vos règles métier.

Oui. Si vous collez un tableau JSON, le générateur traite chaque élément comme un échantillon séparé et produit un schéma décrivant un élément individuel, pas le tableau extérieur. Activez “traiter comme conteneur de tableau” si vous souhaitez la forme du tableau extérieur à la place.

Outils similaires

Outil disponible dans d’autres langues