Utilia

Validateur de schéma JSON

Validez un document JSON avec un schéma JSON dans votre navigateur. Chaque erreur est listée avec son chemin, son mot-clé et sa place dans le schéma.

Comment valider un JSON avec un schéma

  1. Collez votre schéma dans Schéma JSON et vos données dans Document JSON, ou choisissez un cas tout prêt dans Exemple.
  2. Laissez Version sur Automatique ($schema) pour appliquer la version indiquée par le $schema du schéma, ou imposez draft 4, 7, 2019-09 ou 2020-12.
  3. La validation se fait pendant la saisie ; Valider la relance. Formater les deux réindente les deux textes.
  4. Lisez le résultat : une ligne verte si le document est conforme, sinon un tableau des erreurs.

Lire le tableau des erreurs

Chaque ligne correspond à une règle non respectée :

  • Chemin dans le document est un pointeur JSON vers la valeur fautive. /roles/1 désigne le deuxième élément de roles ; (racine) désigne le document entier.
  • Mot-clé est la règle du schéma qui échoue : type, required, minimum, pattern, format, additionalProperties, etc.
  • Message explique l’échec, par exemple « 0 est inférieur à 1. »
  • Chemin dans le schéma situe le mot-clé dans le schéma, comme /properties/id/minimum, pour retrouver la règle en un coup d’œil.

La validation ne s’arrête pas au premier problème : toutes les erreurs sont listées. Quand une propriété d’objet échoue, le validateur produit une erreur de synthèse (« La propriété « id » ne respecte pas son schéma ») suivie de la cause précise. Afficher seulement les erreurs les plus précises masque ces synthèses ; décochez la case pour voir toute la chaîne. Les erreurs anyOf et oneOf restent toujours affichées avec celles de chaque branche, car elles n’ont de sens qu’ensemble.

Ce qui est pris en charge

  • Versions : draft 4, 6 (validé avec les règles du draft 7), 7, 2019-09 et 2020-12, y compris $defs/definitions, les $ref locales, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties et unevaluatedItems.
  • Formats : date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer et relative-json-pointer sont vérifiés. Les formats inconnus sont ignorés, comme le permet la spécification.
  • Références : un $ref peut viser n’importe quel endroit du schéma, y compris un $id qu’il déclare. Aucun schéma distant n’est téléchargé : une référence vers une autre URL est signalée comme non résolue.

Cet outil valide des documents avec votre schéma. Il ne vérifie pas que le schéma respecte lui-même le méta-schéma, mais il signale les noms de type inconnus comme "strin" ou "int", une faute de frappe fréquente que les validateurs ignorent sans rien dire.

Les exemples

  • Profil utilisateur (2020-12) : required, longueurs de chaînes, format: email, un enum dans items, uniqueItems et additionalProperties: false.
  • Liste de produits avec $ref (draft-07) : un tableau dont les éléments renvoient à #/definitions/product, avec un pattern pour le code article et un prix en exclusiveMinimum.
  • Configuration avec if/then (2019-09) : un certificat exigé seulement en mode HTTPS, un oneOf entre courriel et URI, et des bornes numériques.

Chaque exemple est accompagné d’un document qui contient des erreurs volontaires, pour voir à quoi ressemblent les messages.

Questions fréquentes

Mes données sont-elles envoyées sur un serveur ?

Non. Le schéma et le document sont validés dans votre navigateur ; rien n’est transmis.

Pourquoi mon $ref est-il « non résolu » ?

Le validateur ne connaît que le schéma collé. Un $ref vers un autre fichier ou une URL ne peut pas être suivi : copiez les définitions visées dans $defs et pointez vers #/$defs/….

Quelle version choisir ?

Celle que vise votre projet, déclarée avec $schema. Pour un nouveau schéma, 2020-12 est la version actuelle ; c’est aussi celle d’OpenAPI 3.1.

Pourquoi integer refuserait-il 2.0 ?

Il ne le refuse pas : JSON Schema considère 2.0 comme un entier, puisque sa valeur est entière. C’est 2.5 qui échoue avec "type": "integer".

L'outil fonctionne-t-il hors ligne ?

Oui. Une fois la page chargée et une première validation effectuée (qui charge le validateur), aucune connexion n’est nécessaire.