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.
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
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
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
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.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "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.
{ "properties": { "name": { "type": "string", "required": true } } } { "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".
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "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.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "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.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
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").
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both 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 ?
Quels drafts JSON Schema ce validateur prend-il en charge ?
Comment valider du JSON contre un schéma ?
Quelle est la différence entre la validation JSON Schema et la validation de syntaxe JSON ?
Pourquoi mon schéma rejette-t-il du JSON qui semble correct ?
Prend-il en charge $ref et les références de schémas distants ?
Que fait additionalProperties: false ?
Comment valider du JSON contre un schéma en Node.js ou Python ?
Quelle est la différence entre oneOf, anyOf et allOf ?
Prend-il en charge les schémas OpenAPI ?
Pourquoi le validateur dit-il que mon JSON Schema est lui-même invalide ?
L'outil envoie-t-il mon JSON ou mon schéma à un serveur ?
Puis-je valider du JSON Lines (NDJSON) ou plusieurs documents ?
Outils connexes
Voir tous les outils →Décodeur et Encodeur Base64
Encodage et formatage
Décodez et encodez en Base64 en ligne gratuitement. Conversion en temps réel, support UTF-8 et émojis. 100 % privé, dans votre navigateur.
JSON Diff (Comparateur)
Encodage et formatage
Comparez deux fichiers JSON instantanément dans votre navigateur. Vue côte à côte, sortie JSON Patch RFC 6902, ignorer les champs bruyants comme les horodatages et les ID. 100% privé, aucun envoi.
Formateur et Validateur JSON
Encodage et formatage
Formatez, validez et embellissez vos JSON dans le navigateur. Validation syntaxique, détection d'erreurs, minification et copie en un clic. 100 % privé.
Convertisseur JSON vers YAML
Encodage et formatage
Collez du JSON, obtenez du YAML instantanément. En direct dans le navigateur. K8s/Compose, 2/4 espaces, guillemets sécurisés Norway. 100 % privé, sans envoi.
Générateur QR Code — URL, WiFi, vCard, Email, SMS
Encodage et formatage
Générateur de QR Code gratuit. Créez des QR statiques pour URL, WiFi, vCard, email et SMS. Téléchargement SVG & PNG. Sans expiration, sans inscription, 100% dans votre navigateur.
Encodeur et Décodeur URL avec Analyseur de Structure Intégré
Encodage et formatage
Décodez et encodez vos URLs instantanément. Analyseur intégré : protocole, hôte, chemin et paramètres. Modes encodeURI/encodeURIComponent. 100 % privé.