Guide de référence complet des mots-clés et de la syntaxe JSON Schema
$schemaCore / MetaS'applique à : rootDeclares the JSON Schema dialect version
{ "$schema": "https://json-schema.org/draft/2020-12/schema" }ℹ Always include at root to declare the dialect
$idCore / MetaS'applique à : anySets the base URI for the schema
{ "$id": "https://example.com/schemas/user.json" }titleCore / MetaS'applique à : anyHuman-readable title for the schema or property
{ "title": "User", "type": "object" }descriptionCore / MetaS'applique à : anyHuman-readable description of the schema's purpose
{ "description": "A registered user account", "type": "object" }$commentCore / MetaS'applique à : anyDeveloper comment — not rendered to users
{ "$comment": "Added 2024-01 to support OAuth users" }$defs / definitionsCore / MetaS'applique à : rootRepository for reusable sub-schemas
{ "$defs": { "email": { "type": "string", "format": "email" } } }ℹ $defs is draft 2020-12+; use definitions in draft-07
$refCore / MetaS'applique à : anyReference to another schema by URI or JSON Pointer
{ "$ref": "#/$defs/email" }ℹ Can reference internal (#/$defs/…) or external schemas
type: stringTypesS'applique à : stringValue must be a JSON string
{ "type": "string" }type: numberTypesS'applique à : numberValue must be a JSON number (integer or float)
{ "type": "number" }type: integerTypesS'applique à : numberValue must be a whole number (no fractional part)
{ "type": "integer" }type: booleanTypesS'applique à : booleanValue must be true or false
{ "type": "boolean" }type: nullTypesS'applique à : nullValue must be JSON null
{ "type": "null" }type: arrayTypesS'applique à : arrayValue must be a JSON array
{ "type": "array" }type: objectTypesS'applique à : objectValue must be a JSON object
{ "type": "object" }type: [multiple]TypesS'applique à : anyValue may be one of the listed types
{ "type": ["string", "null"] }ℹ Useful for optional/nullable fields
minLength / maxLengthStringsS'applique à : stringMinimum and maximum number of Unicode code points
{ "type": "string", "minLength": 1, "maxLength": 100 }patternStringsS'applique à : stringValue must match a ECMA 262 regular expression
{ "type": "string", "pattern": "^[a-z0-9_]+$" }ℹ Partial match — use ^ and $ to anchor
formatStringsS'applique à : stringSemantic validation hint (implementation-dependent)
{ "type": "string", "format": "email" }ℹ Common values: email, uri, uuid, date, date-time, ipv4, ipv6, hostname
enumStringsS'applique à : anyValue must be one of the listed values
{ "type": "string", "enum": ["active", "inactive", "pending"] }constStringsS'applique à : anyValue must exactly equal the given value
{ "const": "v1" }ℹ Equivalent to enum with a single value
minimum / maximumNumbersS'applique à : numberInclusive lower and upper bounds
{ "type": "number", "minimum": 0, "maximum": 100 }exclusiveMinimum / exclusiveMaximumNumbersS'applique à : numberExclusive lower and upper bounds (value < max, value > min)
{ "type": "number", "exclusiveMinimum": 0 }ℹ In draft-07 these were booleans; draft 2019+ they are numbers
multipleOfNumbersS'applique à : numberValue must be a multiple of the given number
{ "type": "integer", "multipleOf": 5 }propertiesObjectsS'applique à : objectSchema for each named property
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" } } }requiredObjectsS'applique à : objectArray of property names that must be present
{ "type": "object", "required": ["id", "email"] }additionalPropertiesObjectsS'applique à : objectSchema or boolean controlling unknown properties
{ "type": "object", "additionalProperties": false }ℹ false = no extra properties allowed; a schema validates extra properties
patternPropertiesObjectsS'applique à : objectSchemas applied to properties whose name matches the regex key
{ "patternProperties": { "^S_": { "type": "string" } } }minProperties / maxPropertiesObjectsS'applique à : objectMin/max number of properties in the object
{ "type": "object", "minProperties": 1, "maxProperties": 10 }items (draft-07)ArraysS'applique à : arraySchema for all items (or tuple schemas as array)
{ "type": "array", "items": { "type": "string" } }ℹ In draft-2020-12, items applies to all remaining items after prefixItems
prefixItems (2020-12)ArraysS'applique à : arrayPer-index schemas for a tuple
{ "type": "array", "prefixItems": [{ "type": "string" }, { "type": "number" }] }ℹ Replaces tuple form of items from draft-07
minItems / maxItemsArraysS'applique à : arrayMin/max number of array elements
{ "type": "array", "minItems": 1, "maxItems": 50 }uniqueItemsArraysS'applique à : arrayAll items must be unique
{ "type": "array", "items": { "type": "string" }, "uniqueItems": true }containsArraysS'applique à : arrayAt least one item must match the given schema
{ "type": "array", "contains": { "const": "admin" } }ℹ Use minContains / maxContains to control how many must match
allOfCompositionS'applique à : anyValue must be valid against ALL listed schemas
{ "allOf": [{ "type": "string" }, { "minLength": 5 }] }ℹ Intersection — use for schema composition/extension
anyOfCompositionS'applique à : anyValue must be valid against AT LEAST ONE listed schema
{ "anyOf": [{ "type": "string" }, { "type": "number" }] }oneOfCompositionS'applique à : anyValue must be valid against EXACTLY ONE listed schema
{ "oneOf": [{ "type": "string" }, { "type": "number" }] }ℹ Validates all and ensures exactly one matches — slower than anyOf
notCompositionS'applique à : anyValue must NOT be valid against the given schema
{ "not": { "type": "null" } }if / then / elseCompositionS'applique à : anyConditional validation: if condition matches, then/else applies
{ "if": { "properties": { "type": { "const": "email" } } }, "then": { "required": ["email"] }, "else": { "required": ["phone"] } }{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/user.json",
"title": "User",
"description": "A registered user account",
"type": "object",
"required": ["id", "email", "role"],
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"email": {
"type": "string",
"format": "email",
"maxLength": 255
},
"name": {
"type": ["string", "null"],
"maxLength": 100
},
"role": {
"type": "string",
"enum": ["admin", "editor", "viewer"]
},
"tags": {
"type": "array",
"items": { "type": "string" },
"uniqueItems": true,
"maxItems": 20
},
"createdAt": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"address": {
"type": "object",
"required": ["street", "city", "country"],
"properties": {
"street": { "type": "string" },
"city": { "type": "string" },
"zip": { "type": "string", "pattern": "^[0-9]{5}$" },
"country":{ "type": "string", "minLength": 2, "maxLength": 2 }
}
}
},
"type": "object",
"properties": {
"billing": { "$ref": "#/$defs/address" },
"shipping": { "$ref": "#/$defs/address" }
}
}Les mots-clés JSON Schema sont des propriétés standard pour définir les types de données, les formats et les contraintes, tels que $ref, properties, required et type.
Le mot-clé $ref permet de référencer d'autres définitions de schema et de créer des composants de schema réutilisables.
properties définit les propriétés d'un objet, tandis que required est un tableau indiquant lesquelles de ces propriétés sont obligatoires.
JSON Schema a évolué à travers plusieurs versions (Draft-04, Draft-07, 2019-09, 2020-12), chaque version ajoutant de nouveaux mots-clés et fonctionnalités.