Полный справочник по ключевым словам и синтаксису JSON Schema
$schemaCore / MetaПрименяется к: rootDeclares the JSON Schema dialect version
{ "$schema": "https://json-schema.org/draft/2020-12/schema" }ℹ Always include at root to declare the dialect
$idCore / MetaПрименяется к: anySets the base URI for the schema
{ "$id": "https://example.com/schemas/user.json" }titleCore / MetaПрименяется к: anyHuman-readable title for the schema or property
{ "title": "User", "type": "object" }descriptionCore / MetaПрименяется к: anyHuman-readable description of the schema's purpose
{ "description": "A registered user account", "type": "object" }$commentCore / MetaПрименяется к: anyDeveloper comment — not rendered to users
{ "$comment": "Added 2024-01 to support OAuth users" }$defs / definitionsCore / MetaПрименяется к: rootRepository for reusable sub-schemas
{ "$defs": { "email": { "type": "string", "format": "email" } } }ℹ $defs is draft 2020-12+; use definitions in draft-07
$refCore / MetaПрименяется к: anyReference to another schema by URI or JSON Pointer
{ "$ref": "#/$defs/email" }ℹ Can reference internal (#/$defs/…) or external schemas
type: stringTypesПрименяется к: stringValue must be a JSON string
{ "type": "string" }type: numberTypesПрименяется к: numberValue must be a JSON number (integer or float)
{ "type": "number" }type: integerTypesПрименяется к: numberValue must be a whole number (no fractional part)
{ "type": "integer" }type: booleanTypesПрименяется к: booleanValue must be true or false
{ "type": "boolean" }type: nullTypesПрименяется к: nullValue must be JSON null
{ "type": "null" }type: arrayTypesПрименяется к: arrayValue must be a JSON array
{ "type": "array" }type: objectTypesПрименяется к: objectValue must be a JSON object
{ "type": "object" }type: [multiple]TypesПрименяется к: anyValue may be one of the listed types
{ "type": ["string", "null"] }ℹ Useful for optional/nullable fields
minLength / maxLengthStringsПрименяется к: stringMinimum and maximum number of Unicode code points
{ "type": "string", "minLength": 1, "maxLength": 100 }patternStringsПрименяется к: stringValue must match a ECMA 262 regular expression
{ "type": "string", "pattern": "^[a-z0-9_]+$" }ℹ Partial match — use ^ and $ to anchor
formatStringsПрименяется к: stringSemantic validation hint (implementation-dependent)
{ "type": "string", "format": "email" }ℹ Common values: email, uri, uuid, date, date-time, ipv4, ipv6, hostname
enumStringsПрименяется к: anyValue must be one of the listed values
{ "type": "string", "enum": ["active", "inactive", "pending"] }constStringsПрименяется к: anyValue must exactly equal the given value
{ "const": "v1" }ℹ Equivalent to enum with a single value
minimum / maximumNumbersПрименяется к: numberInclusive lower and upper bounds
{ "type": "number", "minimum": 0, "maximum": 100 }exclusiveMinimum / exclusiveMaximumNumbersПрименяется к: numberExclusive lower and upper bounds (value < max, value > min)
{ "type": "number", "exclusiveMinimum": 0 }ℹ In draft-07 these were booleans; draft 2019+ they are numbers
multipleOfNumbersПрименяется к: numberValue must be a multiple of the given number
{ "type": "integer", "multipleOf": 5 }propertiesObjectsПрименяется к: objectSchema for each named property
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" } } }requiredObjectsПрименяется к: objectArray of property names that must be present
{ "type": "object", "required": ["id", "email"] }additionalPropertiesObjectsПрименяется к: objectSchema or boolean controlling unknown properties
{ "type": "object", "additionalProperties": false }ℹ false = no extra properties allowed; a schema validates extra properties
patternPropertiesObjectsПрименяется к: objectSchemas applied to properties whose name matches the regex key
{ "patternProperties": { "^S_": { "type": "string" } } }minProperties / maxPropertiesObjectsПрименяется к: objectMin/max number of properties in the object
{ "type": "object", "minProperties": 1, "maxProperties": 10 }items (draft-07)ArraysПрименяется к: 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)ArraysПрименяется к: arrayPer-index schemas for a tuple
{ "type": "array", "prefixItems": [{ "type": "string" }, { "type": "number" }] }ℹ Replaces tuple form of items from draft-07
minItems / maxItemsArraysПрименяется к: arrayMin/max number of array elements
{ "type": "array", "minItems": 1, "maxItems": 50 }uniqueItemsArraysПрименяется к: arrayAll items must be unique
{ "type": "array", "items": { "type": "string" }, "uniqueItems": true }containsArraysПрименяется к: arrayAt least one item must match the given schema
{ "type": "array", "contains": { "const": "admin" } }ℹ Use minContains / maxContains to control how many must match
allOfCompositionПрименяется к: anyValue must be valid against ALL listed schemas
{ "allOf": [{ "type": "string" }, { "minLength": 5 }] }ℹ Intersection — use for schema composition/extension
anyOfCompositionПрименяется к: anyValue must be valid against AT LEAST ONE listed schema
{ "anyOf": [{ "type": "string" }, { "type": "number" }] }oneOfCompositionПрименяется к: anyValue must be valid against EXACTLY ONE listed schema
{ "oneOf": [{ "type": "string" }, { "type": "number" }] }ℹ Validates all and ensures exactly one matches — slower than anyOf
notCompositionПрименяется к: anyValue must NOT be valid against the given schema
{ "not": { "type": "null" } }if / then / elseCompositionПрименяется к: 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" }
}
}Ключевые слова JSON Schema — это стандартные свойства для определения типов данных, форматов и ограничений, такие как $ref, properties, required и type.
Ключевое слово $ref позволяет ссылаться на другие определения схем и создавать повторно используемые компоненты схемы.
properties определяет свойства объекта, а required — это массив, указывающий, какие из этих свойств являются обязательными.
JSON Schema развивалась через несколько версий (Draft-04, Draft-07, 2019-09, 2020-12), в каждой из которых добавлялись новые ключевые слова и функции.