Skip to content

Validateur JSON Schema

Validez du JSON contre n'importe quel JSON Schema instantanément dans votre navigateur. Compatible Draft 2020-12, 2019-09 et Draft-07 avec messages d'erreur au chemin précis. 100 % privé — sans envoi, sans compte, gratuit.

Sans pistage Fonctionne dans le navigateur Gratuit
Collez à la fois les données JSON et un schéma
Revu pour la conformité Draft 2020-12, 2019-09 et Draft-07, y compris les cas limites de coercition de types, le vocabulaire format, la résolution des $ref et les chemins d'erreur JSON Pointer. — Équipe Go Tools API Tooling · 7 mai 2026

Qu'est-ce qu'un Validateur JSON Schema ?

Un validateur JSON Schema est un programme qui prend deux documents JSON — un document de données et un document de schéma — et indique si les données respectent le contrat du schéma. Le schéma déclare les types de champs, les clés requises, les plages de valeurs, les valeurs enum autorisées, les patrons regex et les règles structurelles via un vocabulaire fixe (type, properties, required, items, enum, oneOf, allOf, $ref, format). Le validateur parcourt les deux documents en parallèle et émet zéro ou plusieurs erreurs, chacune épinglée à un chemin JSON Pointer dans les données.

La validation s'exécute à l'exécution, à la frontière entre l'entrée non fiable et votre code. Les types TypeScript disparaissent à la compilation et ne peuvent rien pour du JSON arrivant d'un webhook, d'une API tierce ou d'un copier-coller utilisateur — c'est exactement ce vide que JSON Schema comble. Combinez-le avec TypeScript (ou Pydantic en Python) et vous obtenez des garanties à la compilation à l'intérieur de votre base de code plus des garanties à l'exécution à la frontière.

Draft 2020-12 est la spécification courante et celle à choisir pour les nouveaux projets en 2026. Les drafts antérieurs (2019-09, Draft-07, Draft-06, Draft-04) survivent dans les bases legacy — Draft-07 reste courant dans les charts Helm, les paramètres VS Code et les anciennes configurations Ajv. OpenAPI 3.1 utilise Draft 2020-12 nativement ; OpenAPI 3.0 utilise un sous-ensemble de Draft 4.

Cet outil s'exécute entièrement dans votre navigateur. Votre JSON, votre schéma et la sortie de validation ne quittent jamais votre machine — sûr pour les contrats d'API propriétaires et les payloads sensibles. Les pointeurs $ref internes sont résolus automatiquement ; les refs HTTP externes sont volontairement désactivés pour préserver la confidentialité.

Vous travaillez avec des outils JSON adjacents ? Formatez le JSON avec le Formateur JSON avant de coller ; comparez deux documents JSON avec JSON Diff ; convertissez avec JSON vers YAML et YAML vers JSON. Pour la validation de bout en bout en Node, Python et navigateur, voyez notre guide de validation JSON Schema.

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

Fonctionnalités clés

Support multi-Draft

Draft 2020-12 (par défaut), 2019-09 et Draft-07. Détecte automatiquement le draft depuis l'URI $schema ; sélecteur de repli pour les schémas qui n'en ont pas.

Erreurs au chemin précis

Chaque erreur inclut un JSON Pointer (par ex. /user/email/0), le mot-clé en échec (type, required, pattern) et un message en une ligne. Cliquez pour sauter à l'emplacement.

Validation en direct

Valide pendant que vous tapez. Les erreurs se mettent à jour en temps réel pour itérer sur le schéma ou les données sans passer par des boutons Validate.

Couverture des mots-clés format

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — les formats que vous utilisez réellement, validés avec des patrons éprouvés.

100 % côté navigateur

Les entrées ne quittent jamais votre machine. Pas d'envoi, pas d'analytics sur ce que vous collez, pas de localStorage du JSON. Sûr pour les contrats propriétaires et les payloads sensibles.

Schémas d'exemple, en un clic

Présets chargeables (formulaire d'inscription, enveloppe webhook, fichier de configuration, tableau de commandes) pour aboutir à une validation fonctionnelle en moins de cinq secondes.

Exemples

Objet valide — required + types

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

Le schéma déclare id et email comme requis et fixe les types. Les données ci-dessus passent — toutes les contraintes sont satisfaites. Essayez de retirer email ou de changer id en chaîne pour voir les erreurs au chemin précis.

Invalide — required manquant + mauvais type

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

Trois erreurs : /id est une chaîne au lieu d'un entier, /email manque, /age (200) dépasse maximum 150. Chaque erreur indique le chemin JSON Pointer exact pour corriger les données — ou assouplir le schéma — sans deviner.

Union discriminée — oneOf avec const

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Validation d'enveloppe webhook. La première branche oneOf correspond car type vaut "order.created". Passez type à "order.refunded" ou cassez le pattern d'orderId pour voir comment oneOf rapporte les échecs par branche.

Tableau d'objets — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

Deux éléments sont identiques octet pour octet, donc uniqueItems se déclenche. Les éléments 0 et 2 entrent en collision — le validateur signale le doublon à la racine du tableau. Pratique pour repérer les doublons de lignes de panier et les erreurs de fusion sur des requêtes d'expédition.

Comment utiliser

  1. 1

    Collez votre JSON Schema

    Déposez votre schéma dans le panneau de droite. Le validateur détecte automatiquement le draft à partir de l'URI $schema s'il est présent ; sinon, choisissez Draft 2020-12, 2019-09 ou Draft-07 dans la barre d'outils.

  2. 2

    Collez vos données JSON

    Déposez le document JSON à vérifier dans le panneau de gauche. La validation s'exécute pendant que vous tapez ; les grandes entrées (>200 Ko) basculent sur un bouton Validate manuel pour garder la frappe réactive.

  3. 3

    Lisez la liste des erreurs

    Chaque erreur a un chemin JSON Pointer, un mot-clé et un message en une ligne. Cliquez sur une erreur pour sauter à l'emplacement dans vos données, corrigez-la et regardez le compteur baisser en temps réel.

Pièges courants de JSON Schema

Type : integer vs number

JSON Schema traite 1.0 comme un number mais pas comme un integer. Si votre contrat dit integer, le validateur rejette 1.0 — même si la plupart des langages le considèrent égal à 1. Choisissez number sauf si vous avez réellement besoin d'integer.

✗ Incorrect
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Correct
{ "qty": 1 }     schema: { "type": "integer" }   → valid

required au mauvais niveau d'imbrication

required doit être à côté de properties, pas à l'intérieur d'une propriété. Un tableau required à l'intérieur d'une déclaration de propriété est silencieusement ignoré — le validateur ne l'applique jamais.

✗ Incorrect
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Correct
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties vaut true par défaut

Sans additionalProperties: false, le schéma est ouvert — toute clé supplémentaire passe. Oublier cela est la raison la plus fréquente pour laquelle les schémas "acceptent tout".

✗ Incorrect
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Correct
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable vs tableau de types Draft 2020-12

OpenAPI 3.0 utilise nullable: true ; Draft 2020-12 utilise type: ["string", "null"]. Les mélanger produit des schémas qui semblent corrects mais n'autorisent jamais réellement null.

✗ Incorrect
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Correct
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

Pattern sans ancres

Le regex JSON Schema correspond n'importe où par défaut — pattern: "^[A-Z]+$" ancre à toute la chaîne, mais pattern: "[A-Z]+" correspond dès qu'une majuscule existe quelque part.

✗ Incorrect
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Correct
pattern: "^[A-Z]+$"   accepts only: "HELLO"

oneOf à la place d'anyOf

oneOf exige qu'une seule branche corresponde. Si deux branches acceptent la même forme, oneOf échoue sur des données qu'anyOf accepterait — et le message d'erreur est trompeur ("matches more than one").

✗ Incorrect
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Correct
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

Cas d'usage courants

Validation de requête API
Collez un corps de requête et le schéma de votre endpoint avant le déploiement. Attrapez les réponses 400 que vos tests n'ont pas couvertes — champs requis manquants, types incorrects, nombres hors plage.
Vérification de payload webhook
Le fournisseur a envoyé un payload que votre handler rejette ? Validez le payload réel contre votre schéma, puis contre le schéma publié du fournisseur. La différence entre les deux, c'est votre bug.
Linting de fichiers de configuration
package.json, tsconfig.json, helm values.yaml — chaque fichier de configuration a un schéma public. Collez le schéma, collez la configuration, trouvez la faute de frappe. Évitez l'essai-erreur.
Test de composant OpenAPI
Extrayez un composant de schéma d'un document OpenAPI 3.1, collez-le ici, validez des payloads d'exemple. Plus rapide que de monter un serveur mock, déterministe, sans SDK.
Pré-vol de soumission de formulaire
Collez un payload de formulaire d'exemple avant de câbler la validation côté frontend. Confirmez que le schéma rejette ce qu'il faut et accepte ce qu'il faut, puis envoyez le même schéma au client et au serveur.
Vérification de contrat de pipeline de données
La sortie ETL a dérivé ? Collez une ligne d'exemple et le schéma en aval. Identifiez quel producteur a changé et quelles clés sont cassées avant que le pipeline ne reprenne 10 000 enregistrements.

Détails techniques

Conforme Draft 2020-12
Implémente la spécification Draft 2020-12 publiée — mots-clés, système de types, vocabulaire format. Vérifié contre la sortie d'Ajv 8.x et ajv-formats.
Chemins d'erreur JSON Pointer
Les erreurs utilisent JSON Pointer RFC 6901 (/user/email/0). Chaque échec de mot-clé pointe vers un emplacement résolvable unique dans les données — pas d'ambiguïté, pas de recherche par chaîne.
Résolution interne des $ref
Résout les pointeurs $ref dans un seul document (#/$defs/foo, #/properties/bar). Les cycles sont détectés et signalés. Les $ref HTTP externes sont désactivés pour la confidentialité.

Bonnes pratiques

Activez toujours additionalProperties: false
Sur les contrats d'entrée (corps de requête, fichiers de configuration, messages de file), les clés inconnues sont généralement des bugs — fautes de frappe, champs accidentels ou sondages d'attaquant. Rejetez-les par défaut.
Utilisez $defs pour les sous-schémas réutilisables
Inlinez la même forme deux fois et elle dérive. Déplacez les définitions partagées dans $defs et référencez avec $ref — une seule source de vérité, chaque changement s'applique partout.
Validez avant la logique métier
Lancez la validation de schéma juste après JSON.parse, avant de toucher à la structure analysée. Le rétrécissement de types, les valeurs par défaut et la persistance supposent tous que le contrat tient — assurez-vous qu'il tient.

Foire aux questions

Qu'est-ce que la validation JSON Schema ?
La validation JSON Schema vérifie qu'un document JSON respecte un contrat écrit en syntaxe JSON Schema. Le schéma déclare les types de champs, les clés requises, les valeurs autorisées et les règles structurelles ; le validateur parcourt les deux documents en parallèle et signale tout chemin qui viole le contrat. Il s'exécute à la frontière entre l'entrée non fiable (requête API, webhook, fichier de configuration, payload de formulaire) et votre logique métier — il attrape les erreurs de forme avant qu'elles ne corrompent le code en aval. Consultez notre guide complet de la validation JSON Schema pour des exemples de bout en bout en Node, Python et navigateur.
Quels drafts JSON Schema ce validateur prend-il en charge ?
Draft 2020-12 (par défaut et recommandé), Draft 2019-09 et Draft-07. Le validateur détecte automatiquement le draft à partir de l'URI $schema lorsqu'il est présent et retombe sur votre choix dans le menu déroulant sinon. Pour les nouveaux projets en 2026, utilisez Draft 2020-12 — c'est ce qu'OpenAPI 3.1 utilise nativement et ce que Ajv prend par défaut. Draft-07 reste courant dans les bases legacy (anciennes configurations AJV, charts Helm, paramètres VS Code).
Comment valider du JSON contre un schéma ?
Collez vos données JSON dans le panneau de gauche et votre JSON Schema dans le panneau de droite. Le validateur s'exécute instantanément pendant que vous tapez — la coche verte signifie valide, la liste rouge signifie erreurs. Chaque erreur inclut un chemin JSON Pointer (par exemple /user/email), le mot-clé en échec (type, required, pattern, minimum) et un message lisible. Cliquez sur n'importe quelle erreur pour sauter à la ligne fautive. Aucun envoi, aucune inscription.
Quelle est la différence entre la validation JSON Schema et la validation de syntaxe JSON ?
La validation de syntaxe JSON confirme uniquement que le document est analysable — pas de virgule en trop, pas d'accolade manquante. Formateur JSON s'en charge. La validation JSON Schema s'exécute après l'analyse et vérifie que la structure analysée respecte le contrat : champs requis présents, types corrects, valeurs dans la plage. On exécute généralement les deux — d'abord le formatage pour confirmer l'analyse, puis la validation contre le schéma.
Pourquoi mon schéma rejette-t-il du JSON qui semble correct ?
Cinq suspects habituels : (1) additionalProperties: false — vos données contiennent une clé non déclarée par le schéma, souvent une faute de frappe ou un nouveau champ ; (2) type: "integer" vs "number" — JSON Schema traite 1.0 comme un number, pas un integer ; (3) les mots-clés format (email, uri, uuid) rejettent les chaînes mal formées même si elles paraissent correctes ; (4) required au mauvais niveau d'imbrication — required doit apparaître à côté de properties, pas à l'intérieur d'une propriété ; (5) le JSON contient la chaîne "42" là où le schéma attend l'entier 42. Le chemin de l'erreur identifiera précisément lequel.
Prend-il en charge $ref et les références de schémas distants ?
Les pointeurs $ref internes (#/$defs/foo, #/properties/bar) fonctionnent d'origine. Les $ref distants vers des URLs externes sont volontairement désactivés — récupérer des schémas externes divulguerait votre activité de validation à des tiers et casserait le modèle de confidentialité. Pour valider contre un schéma multi-fichiers, intégrez les définitions référencées dans un seul document via $defs, ou exécutez la validation dans votre propre CI avec Ajv où les refs distants sont appropriés.
Que fait additionalProperties: false ?
additionalProperties: false rejette toute clé non déclarée dans properties. C'est le mot-clé le plus utile pour resserrer les contrats — sans lui, les schémas sont ouverts par défaut et acceptent silencieusement les champs mal orthographiés ou malveillants. Activez toujours additionalProperties: false sur les contrats d'entrée (corps de requête, fichiers de configuration, messages de file). Laissez-le à true (ou omettez-le) seulement quand le schéma est une description partielle d'un document plus grand.
Comment valider du JSON contre un schéma en Node.js ou Python ?
Node : installez Ajv (npm i ajv ajv-formats), appelez new Ajv().compile(schema), puis validate(data). Python : installez jsonschema (pip install jsonschema), appelez jsonschema.validate(data, schema). Pour TypeScript, générez les types depuis le schéma avec json-schema-to-typescript afin que la compilation et l'exécution restent synchronisées. Notre guide de validation JSON Schema contient des recettes prêtes à coller pour Node, Python et navigateur.
Quelle est la différence entre oneOf, anyOf et allOf ?
allOf — doit correspondre à chaque sous-schéma (intersection, utilisé pour la composition). anyOf — doit correspondre à au moins un (union, fast-fail). oneOf — doit correspondre à exactement un (union discriminée, plus lent mais plus strict). Utilisez oneOf pour les unions discriminées comme les événements webhook étiquetés par type ; utilisez anyOf pour les unions permissives ; utilisez allOf pour étendre un schéma de base avec des contraintes supplémentaires. oneOf est le plus lent car il teste toutes les branches — préférez anyOf quand l'unicité n'est pas requise.
Prend-il en charge les schémas OpenAPI ?
OpenAPI 3.1 utilise Draft 2020-12 nativement, donc tout composant de schéma OpenAPI 3.1 se colle directement. OpenAPI 3.0 utilise un sous-ensemble de Draft 4 essentiellement compatible — vous pouvez rencontrer des cas limites autour de nullable: true (syntaxe 3.0) que Draft 2020-12 exprime avec type: ["string", "null"]. Pour la validation complète d'un document OpenAPI (paths, operations, security), utilisez un linter OpenAPI dédié comme Spectral ; cet outil se concentre sur la partie schéma.
Pourquoi le validateur dit-il que mon JSON Schema est lui-même invalide ?
Un JSON Schema est un document JSON qui doit être du JSON valide avant de pouvoir être un schéma valide. Causes courantes : virgule finale dans un objet properties, guillemets simples au lieu de doubles, $schema pointant vers une URL de draft inexistante, ou required listé comme chaîne au lieu d'un tableau. Formatez d'abord le schéma dans le Formateur JSON pour faire ressortir les problèmes de syntaxe, puis recollez-le ici pour la validation sémantique.
L'outil envoie-t-il mon JSON ou mon schéma à un serveur ?
Non. Toute l'analyse et la validation s'exécutent localement dans votre navigateur. Votre JSON, votre schéma et les résultats de validation ne quittent jamais votre machine — pas d'envoi, pas de localStorage des entrées, pas d'analytics sur ce que vous collez. Sûr pour les contrats d'API propriétaires, les fichiers de configuration internes et les payloads sensibles. Seul votre choix de draft persiste dans localStorage pour survivre à un rafraîchissement ; videz les données du navigateur pour l'effacer.
Puis-je valider du JSON Lines (NDJSON) ou plusieurs documents ?
Cet outil valide un document par exécution. Pour JSON Lines, validez chaque ligne individuellement ou utilisez Ajv en Node avec un schéma et un parser de stream comme JSONStream. Pour la validation par lots de grands jeux de données, préférez la ligne de commande — ajv-cli ou check-jsonschema (Python) traitent des milliers de fichiers par seconde avec une seule compilation de schéma.