PK Systems PK Systems
Outils pour développeurs

Générateur JSON vers JSON Schema

Collez un échantillon JSON, obtenez un JSON Schema (Draft 2020-12 ou Draft 7) avec détection automatique des formats et liste des champs requis.

Générateur JSON vers JSON Schema

Résultat

Le schéma apparaît ici pendant que vous tapez.

Qu'est-ce que JSON Schema ?

JSON Schema est un vocabulaire pour décrire du JSON. Il dit « cet objet doit avoir ces clés, de ces types, avec des valeurs respectant ces motifs » — et les validateurs (Ajv, jsonschema, opis/json-schema, tous les outils OpenAPI) font respecter ce contrat. Le standard actuel est Draft 2020-12, qui est ce qu'utilise OpenAPI 3.1 ; Draft 7 est la version précédente, encore courante dans les anciennes chaînes d'outils. Les deux ont des différences syntaxiques mineures — ce générateur produit les deux.

Comment l'utiliser

Collez un échantillon JSON. La zone de sortie produit un schéma correspondant avec chaque feuille typée en string, integer, number, boolean, null, plus object / array pour les conteneurs. Avec Détecter les formats activé, les chaînes correspondant à des motifs courants reçoivent un indice formatemail, uri, date, date-time, uuid, ipv4. Avec Marquer les requis activé, chaque clé présente dans l'échantillon est ajoutée à required — déposez un tableau de plusieurs objets pour obtenir une liste honnête de champs requis (seules les clés présentes dans tous les objets survivent). Les champs optionnels Title et $id sont ajoutés en haut du schéma.

Formats détectés

  • email — tout ce qui correspond au motif simple local@host.tld.
  • uri — chaînes commençant par http:// ou https://.
  • dateAAAA-MM-JJ (RFC 3339 full-date).
  • date-timeAAAA-MM-JJTHH:MM:SS[.fff][Z|+HH:MM] (RFC 3339).
  • timeHH:MM:SS[.fff][Z|+HH:MM].
  • uuid — UUID RFC 4122 v1–v5.
  • ipv4 — adresses IPv4 en notation décimale pointée.
Les autres formats de la spec (uri-reference, idn-email, regex, json-pointer) ne sont pas auto-détectés ; ajoutez-les à la main si nécessaire.

Questions fréquentes

Puis-je faire confiance à un schéma inféré en production ?
Considérez-le comme un point de départ. L'inférenceur ne voit que ce qui est dans votre échantillon — si un champ est un entier positif dans tous les exemples mais documenté pour autoriser zéro ou des négatifs, le schéma inféré est trop strict. De même, des champs présents dans 100 % de vos échantillons peuvent en réalité être optionnels. Comparez toujours le schéma au contrat documenté de votre API avant de le pousser.
Comment choisit-il les champs requis ?
Pour un objet seul, chaque clé est marquée requise (puisque toutes sont présentes). Pour un tableau d'objets, seules les clés présentes dans chaque objet sont marquées requises — les clés présentes dans certains mais pas tous deviennent optionnelles. Cela correspond à la lecture que font les validateurs : « ce champ doit toujours être présent ».
Quelle différence entre Draft 2020-12 et Draft 7 ?
Pour 95 % des schémas, aucune — le vocabulaire de base est identique. Les différences apparaissent dans les fonctionnalités avancées : $dynamicRef remplace $recursiveRef, items remplace additionalItems pour la validation de tuples, et quelques mots-clés ont changé de vocabulaire. Si vous intégrez avec OpenAPI 3.1 ou Ajv 8+, choisissez 2020-12 ; pour un Ajv plus ancien (v6), un Stoplight ancien ou tout ce qui est antérieur à 2019, choisissez Draft 7.
Pourquoi ma date est-elle détectée comme date-time et non date ?
L'ordre de détection est date-time avant date, donc 2024-01-15T00:00:00Z matche date-time en premier. 2024-01-15 seul matche date. Si vous voulez un champ date sans heure mais qui contient l'heure, éditez le schéma à la main ou retirez la composante horaire de votre échantillon.
Le schéma préserve-t-il les champs de type énumération ?
Non — déduire « ceci doit être l'un de [active, paused, archived] » exige plus d'échantillons qu'un collage typique n'en contient, et les faux positifs sont dangereux (un seul tenant passant à un nouvel état casserait la validation en production). Ajoutez enum: [...] à la main une fois votre domaine vérifié.
Puis-je utiliser le résultat avec OpenAPI ?
Oui — placez le corps du schéma (tout sauf $schema et $id) dans une entrée components.schemas.MyType. OpenAPI 3.1 supporte tout le vocabulaire Draft 2020-12 ; OpenAPI 3.0 supporte un sous-ensemble proche de Draft 7 mais avec quelques particularités (pas de mot-clé nullable en Draft 7 — OpenAPI 3.0 a ajouté le sien).