Contrôlez du JSON avec un schéma ou créez une ébauche depuis un exemple

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 navigateur
JSON Schema

Utilisez un objet JSON Schema ; les références commençant par #/ sont résolues dans cette page.

Données JSON

Collez les données pour valider, ou collez un échantillon représentatif et générez un schéma de départ.

Résultat de validation
Entrez une donnée JSON Schema et JSON, puis sélectionnez Valider JSON.

Chèques inclus dans ce validateur local

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.

Contrôlez une charge utile contre son schéma dans cet onglet

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.

Comment contrôler du JSON avec un schéma

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.

  1. Collez le schéma dans le champ JSON Schema et le document dans le champ de données JSON. Les références locales comme #/$defs/address sont suivies ; une référence vers un autre fichier est signalée comme non prise en charge ici.
  2. Sélectionnez Valider JSON. Chaque problème est listé avec le chemin où il a été trouvé, par exemple $.users[2].email, et avec la règle enfreinte. La liste s’arrête après 100 problèmes et le signale.
  3. Sélectionnez Générer un schéma à partir de données pour construire une ébauche depuis l’exemple. L’ébauche remplace le contenu du champ schéma, et l’exemple est contrôlé contre elle aussitôt.
  4. Copier le schéma copie le champ schéma, Charger un exemple remplit les deux champs avec une petite charge utile d’API qui passe, et Effacer vide les deux champs et le résultat. Modifier un champ après un résultat estompe l’ancien verdict et invite à relancer le contrôle.

Ce que le contrôle lit et ce qu’il laisse de côté

Ce que 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 ; 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.

Des réponses indépendantes de l’ordre des clés

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.

Ébauche de schéma à partir d’un exemple

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.

Limites

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.

Outils récents :