Collez un schéma et les données pour voir où ils divergent ; Générer transforme un exemple en ébauche de schéma et prouve que l’ébauche accepte cet exemple. Rien ne quitte le navigateur.
Fonctionne localement dans votre navigateurUtilisez un objet JSON Schema ; les références commençant par #/ sont résolues dans cette page.
Collez les données pour valider, ou collez un échantillon représentatif et générez un schéma de départ.
Le contrôle lit type, enum, const, allOf, anyOf, oneOf, not et if/then/else ; properties, patternProperties, additionalProperties, propertyNames, required, dependentRequired, minProperties et maxProperties ; items, prefixItems, additionalItems, minItems, maxItems, uniqueItems et contains ; minLength, maxLength, pattern et les formats email, uuid, date, time, date-time, uri, uri-reference, ipv4, ipv6 et hostname ; minimum, maximum, exclusiveMinimum, exclusiveMaximum et multipleOf ; et les valeurs $ref locales, y compris les références qui récursent dans les données. La forme booléenne de exclusiveMinimum/exclusiveMaximum du draft-04 et la forme tableau de items sont également lues. Tout autre mot-clé ou format est laissé de côté : confirmez les règles de production avec un validateur conforme.
Le schéma et les données restent dans le navigateur ; rien n’est envoyé. Chaque problème est listé avec le chemin où il a été trouvé, la liste s’arrête après 100 problèmes, et Générer écrit une ébauche de schéma à partir de votre exemple puis recontrôle cet exemple contre elle.
Collez un JSON Schema et un document JSON pour voir chaque endroit où les données contredisent le schéma. Le contrôle s’exécute dans cet onglet : rien n’est envoyé, et l’outil fonctionne même sans réseau.
Générer fait le chemin inverse. Il lit votre exemple, écrit une ébauche de schéma — éléments de tableau fusionnés sur tous les éléments, required limité aux clés présentes dans chaque objet — puis valide l’exemple contre cette ébauche : une ébauche qui ne décrit pas son propre exemple est signalée au lieu d’être gardée en silence.
type, enum, const, allOf, anyOf, oneOf, not et if/then/else ; properties, patternProperties, additionalProperties, propertyNames, required, dependentRequired, minProperties et maxProperties ; items, prefixItems, additionalItems, minItems, maxItems, uniqueItems et contains ; minimum, maximum, exclusiveMinimum, exclusiveMaximum et multipleOf ; minLength, maxLength et pattern ; et les valeurs $ref locales, y compris les références qui récursent dans les données. La forme booléenne de exclusiveMinimum/exclusiveMaximum du draft-04 et la forme tableau de items sont également lues.
Les contrôles de format couvrent email, uuid, date, time, date-time, uri, uri-reference, ipv4, ipv6 et hostname. Une date comme 2024-02-30 et une heure comme 99:99 sont refusées parce que le calendrier et l’horloge sont vérifiés, pas seulement la forme du texte ; tout autre nom de format est laissé de côté. La spécification traite format comme une annotation : cette page est donc plus stricte qu’un simple lecteur.
enum, const et uniqueItems comparent les valeurs de façon structurelle : {"a": 1, "b": 2} et {"b": 2, "a": 1} sont une seule valeur, pas deux. La version précédente comparait le texte JSON et se trompait dans les deux sens : elle refusait une valeur enum valide et acceptait un élément dupliqué dans un tableau.
minLength et maxLength comptent les points de code : un emoji écrit comme paire de substitution compte pour un caractère.
Les éléments d’un tableau sont fusionnés sur tous les éléments : un tableau mixte produit une liste anyOf, et les objets sont fusionnés propriété par propriété, avec required limité aux clés présentes dans chaque objet. Un objet ou un tableau vide ne produit pas de liste required vide.
Les chaînes qui ressemblent à un UUID, une adresse e-mail, une date, une date-heure ou un URI reçoivent l’indice de format correspondant : l’ébauche est plus utile qu’un type nu — pour un premier passage, pas comme contrat.
La liste des problèmes s’arrête à 100 entrées. Une imbrication de plus de 4000 niveaux arrête le contrôle par un message au lieu de faire tomber le navigateur, et une référence #/ circulaire est signalée au lieu d’être suivie sans fin.
Les motifs et les formats utilisent le moteur d’expressions régulières du navigateur ; 20 000 éléments de tableau ou propriétés d’objet sont contrôlés en une vingtaine de millisecondes.