ToolDeck

Validateur JSON Schema

Validez des données JSON contre un JSON Schema (Draft 7)

Essayer un exemple

Données JSON

JSON Schema

Fonctionne localement · Sûr pour coller des secrets
Fonctionne localement · Sûr pour coller des secrets

Qu'est-ce que la validation par JSON Schema ?

La validation par JSON Schema est le processus qui consiste à vérifier qu'un document JSON est conforme à un ensemble de contraintes structurelles et de valeurs définies dans un JSON Schema. Le schéma lui-même est un document JSON qui décrit la forme attendue de vos données : quelles propriétés sont requises, quels types elles doivent avoir, les plages autorisées pour les nombres, les patterns de chaînes, les longueurs de tableaux, et bien plus. La spécification JSON Schema est maintenue sur json-schema.org et publiée sous forme de séries de brouillons IETF — Draft 7 et Draft 2020-12 sont les plus largement adoptés.

Là où la validation JSON simple ne vérifie que la syntaxe (les accolades sont-elles appariées ? les chaînes sont-elles entre guillemets ?), la validation par schéma va plus loin. Elle répond à des questions comme : la réponse de cette API contient-elle un champ "id" qui est toujours un entier ? Le champ "status" est-il l'une des trois valeurs autorisées ? Les objets imbriqués ont-ils la bonne forme ? Ce type de vérification structurelle détecte des bugs que les vérifications syntaxiques manquent entièrement, car un JSON syntaxiquement valide peut encore être sémantiquement incorrect pour votre application.

JSON Schema est utilisé dans les définitions OpenAPI/Swagger, la validation de fichiers de configuration, la validation de formulaires, les contraintes de documents en base de données et les tests automatisés. Des outils comme Ajv (JavaScript), jsonschema (Python) et check-jsonschema (CLI) implémentent la spécification pour valider des données par programmation. Ce validateur en ligne vous permet de coller un schéma et un document de données pour vérifier la conformité instantanément, sans installer de bibliothèque.

Pourquoi utiliser un validateur JSON Schema en ligne ?

Écrire des schémas et déboguer les erreurs de validation manuellement est lent. Un validateur JSON Schema en ligne vous donne un retour instantané sur la conformité de vos données à votre schéma, avec des messages d'erreur précis indiquant la propriété exacte qui a échoué.

Retour de validation instantané
Collez votre schéma et vos données, et visualisez les résultats de validation en temps réel. Chaque erreur indique le chemin JSON et la contrainte spécifique qui a échoué, pour corriger les problèmes sans lire la sortie brute d'une bibliothèque.
🔒
Traitement local, respect de la vie privée
Vos données JSON ne quittent jamais votre navigateur. Toute la validation s'exécute localement en JavaScript. Pas de serveur, pas de journaux, pas de rétention de données. Adapté aux schémas décrivant des API internes ou contenant des noms de champs propriétaires.
🎯
Validation conforme au Draft
Le validateur gère les mots-clés du Draft 7 : type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf et additionalProperties. Testez votre schéma ici avant de l'intégrer à votre pipeline de build ou à votre suite de tests.
📋
Aucun compte ni installation
Ouvrez la page, collez votre JSON et validez. Pas de npm install, pas de paquet pip, pas d'image Docker. Utile pour une vérification rapide de schéma sur une machine où vous ne pouvez pas installer d'outils de développement.

Cas d'utilisation de la validation JSON Schema

Tests de contrats API
Validez les réponses API par rapport au schéma défini dans votre spécification OpenAPI. Détectez les changements incompatibles — comme un champ passant d'entier à chaîne — avant qu'ils n'atteignent la production.
Vérification de fichiers de configuration
Vérifiez que les fichiers de configuration JSON pour les pipelines CI/CD, les manifestes Kubernetes ou les paramètres d'application correspondent au schéma attendu avant de les committer. Évite les échecs de déploiement causés par des clés manquantes ou mal saisies.
Portes de validation en pipeline DevOps
Ajoutez la validation par schéma comme étape CI pour rejeter les payloads qui violent le contrat. Applicable aux fichiers de variables Terraform, aux entrées GitHub Actions ou à tout JSON structuré consommé par des automatisations.
Revue de données de test et QA
Vérifiez que les fixtures de test et les fichiers de données mock sont conformes au même schéma qu'attend votre application. Des données de test non conformes sont une source fréquente de faux positifs dans les résultats de tests.
Ingestion dans un pipeline de données
Validez les enregistrements JSON entrants à l'entrée d'un pipeline de données. La validation par schéma filtre les événements malformés avant qu'ils n'atteignent votre entrepôt de données, réduisant les coûts de nettoyage en aval.
Apprentissage de la syntaxe JSON Schema
Expérimentez les mots-clés de schéma de façon interactive. Écrivez un schéma, collez des données de test et observez quelles contraintes passent ou échouent. Plus rapide que d'écrire un script et de l'exécuter depuis le terminal à chaque fois.

Référence des mots-clés JSON Schema

Un JSON Schema est construit à partir de mots-clés qui imposent chacun une contrainte sur les données validées. Le tableau ci-dessous liste les mots-clés les plus utilisés dans Draft 7 et les versions ultérieures. Chaque mot-clé peut être combiné avec d'autres dans le même objet de schéma.

Mot-cléRôleExemple
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Comparaison des versions JSON Schema : Draft 7 vs 2019-09 vs 2020-12

JSON Schema a traversé plusieurs versions de brouillon. Draft 7 (publié en 2018) est le plus largement supporté par les outils. Draft 2019-09 a introduit $defs (remplaçant definitions), unevaluatedProperties et $recursiveRef. Draft 2020-12 (la dernière version stable) a remplacé $recursiveRef par $dynamicRef et introduit prefixItems pour la validation de tuples. Lors du choix d'un brouillon, vérifiez que votre bibliothèque de validation le supporte. Ajv supporte les trois brouillons. La bibliothèque jsonschema de Python supporte jusqu'à 2020-12 depuis la version 4.0.

FonctionnalitéDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Exemples de code

Ces exemples montrent comment valider du JSON par rapport à un schéma par programmation. Chacun utilise une bibliothèque bien maintenue pour son écosystème de langage.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Questions fréquemment posées

Quelle est la différence entre la validation JSON et la validation JSON Schema ?
La validation JSON vérifie qu'une chaîne est du JSON syntaxiquement correct : accolades bien imbriquées, clés entre guillemets, pas de virgules de fin. La validation JSON Schema va plus loin et vérifie si les données JSON analysées correspondent à un contrat structurel : types corrects, champs requis présents, valeurs dans les plages autorisées. Vous avez besoin d'un JSON valide avant d'appliquer un schéma, mais un JSON valide peut quand même échouer à la validation par schéma.
Quel brouillon JSON Schema dois-je utiliser ?
Draft 7 est le choix le plus sûr par défaut. Il bénéficie du support de bibliothèques le plus large dans tous les langages et couvre les mots-clés dont la plupart des projets ont besoin : type, properties, required, enum, pattern, anyOf, oneOf, allOf et $ref. Utilisez Draft 2020-12 si vous avez besoin de fonctionnalités comme prefixItems pour la validation de tuples, $dynamicRef pour les schémas extensibles ou unevaluatedProperties pour des formes d'objets strictes. Consultez la documentation de votre bibliothèque de validation pour confirmer le support du brouillon avant de migrer.
Comment fonctionne $ref dans JSON Schema ?
Le mot-clé $ref vous permet de référencer un autre schéma par URI au lieu de le dupliquer. Une valeur comme "$ref": "#/$defs/address" pointe vers un schéma défini dans la section $defs du même document. Vous pouvez aussi référencer des fichiers externes avec "$ref": "https://example.com/schemas/address.json". Dans Draft 7, $ref remplace tous les mots-clés frères dans le même objet. Dans Draft 2019-09 et les versions ultérieures, les mots-clés frères sont appliqués en même temps que $ref.
Quelle est la différence entre anyOf, oneOf et allOf ?
allOf exige que les données correspondent à chaque sous-schéma du tableau. anyOf exige une correspondance avec au moins un sous-schéma. oneOf exige une correspondance avec exactement un sous-schéma et échoue si les données en correspondent à zéro ou plus d'un. Pour les champs nullables, anyOf avec un type et null est courant : {"anyOf": [{"type": "string"}, {"type": "null"}]}. Utilisez oneOf quand les sous-schémas sont mutuellement exclusifs, comme les unions étiquetées.
JSON Schema peut-il valider des objets imbriqués et des tableaux ?
Oui. Utilisez le mot-clé properties pour définir des schémas pour les clés d'objets imbriqués, et le mot-clé items pour définir un schéma auquel chaque élément de tableau doit se conformer. Vous pouvez les imbriquer à n'importe quelle profondeur. Pour les tableaux où chaque position a un schéma différent (tuples), utilisez prefixItems dans Draft 2020-12 ou la forme tableau de items dans Draft 7.
Les données que je colle dans cet outil sont-elles envoyées à un serveur ?
Non. Le validateur s'exécute entièrement dans votre navigateur en JavaScript. Vos données JSON et votre schéma ne sont jamais transmis à un serveur. Vous pouvez le vérifier en ouvrant l'inspecteur réseau de votre navigateur pendant l'utilisation de l'outil.
Comment valider un JSON Schema dans un pipeline CI/CD ?
Utilisez un validateur CLI comme check-jsonschema (Python/pip) ou ajv-cli (Node.js/npm). Les deux acceptent un fichier de schéma et un ou plusieurs fichiers de données comme arguments. Ajoutez la commande de validation comme étape dans votre configuration CI. Si la validation échoue, le processus se termine avec un code non nul, ce qui bloque le pipeline. Pour GitHub Actions, vous pouvez aussi utiliser directement l'action check-jsonschema.