Vollständiger Referenzleitfaden für JSON Schema-Schlüsselwörter und Syntax
$schemaCore / MetaGilt für: rootDeclares the JSON Schema dialect version
{ "$schema": "https://json-schema.org/draft/2020-12/schema" }ℹ Always include at root to declare the dialect
$idCore / MetaGilt für: anySets the base URI for the schema
{ "$id": "https://example.com/schemas/user.json" }titleCore / MetaGilt für: anyHuman-readable title for the schema or property
{ "title": "User", "type": "object" }descriptionCore / MetaGilt für: anyHuman-readable description of the schema's purpose
{ "description": "A registered user account", "type": "object" }$commentCore / MetaGilt für: anyDeveloper comment — not rendered to users
{ "$comment": "Added 2024-01 to support OAuth users" }$defs / definitionsCore / MetaGilt für: rootRepository for reusable sub-schemas
{ "$defs": { "email": { "type": "string", "format": "email" } } }ℹ $defs is draft 2020-12+; use definitions in draft-07
$refCore / MetaGilt für: anyReference to another schema by URI or JSON Pointer
{ "$ref": "#/$defs/email" }ℹ Can reference internal (#/$defs/…) or external schemas
type: stringTypesGilt für: stringValue must be a JSON string
{ "type": "string" }type: numberTypesGilt für: numberValue must be a JSON number (integer or float)
{ "type": "number" }type: integerTypesGilt für: numberValue must be a whole number (no fractional part)
{ "type": "integer" }type: booleanTypesGilt für: booleanValue must be true or false
{ "type": "boolean" }type: nullTypesGilt für: nullValue must be JSON null
{ "type": "null" }type: arrayTypesGilt für: arrayValue must be a JSON array
{ "type": "array" }type: objectTypesGilt für: objectValue must be a JSON object
{ "type": "object" }type: [multiple]TypesGilt für: anyValue may be one of the listed types
{ "type": ["string", "null"] }ℹ Useful for optional/nullable fields
minLength / maxLengthStringsGilt für: stringMinimum and maximum number of Unicode code points
{ "type": "string", "minLength": 1, "maxLength": 100 }patternStringsGilt für: stringValue must match a ECMA 262 regular expression
{ "type": "string", "pattern": "^[a-z0-9_]+$" }ℹ Partial match — use ^ and $ to anchor
formatStringsGilt für: stringSemantic validation hint (implementation-dependent)
{ "type": "string", "format": "email" }ℹ Common values: email, uri, uuid, date, date-time, ipv4, ipv6, hostname
enumStringsGilt für: anyValue must be one of the listed values
{ "type": "string", "enum": ["active", "inactive", "pending"] }constStringsGilt für: anyValue must exactly equal the given value
{ "const": "v1" }ℹ Equivalent to enum with a single value
minimum / maximumNumbersGilt für: numberInclusive lower and upper bounds
{ "type": "number", "minimum": 0, "maximum": 100 }exclusiveMinimum / exclusiveMaximumNumbersGilt für: numberExclusive lower and upper bounds (value < max, value > min)
{ "type": "number", "exclusiveMinimum": 0 }ℹ In draft-07 these were booleans; draft 2019+ they are numbers
multipleOfNumbersGilt für: numberValue must be a multiple of the given number
{ "type": "integer", "multipleOf": 5 }propertiesObjectsGilt für: objectSchema for each named property
{ "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" } } }requiredObjectsGilt für: objectArray of property names that must be present
{ "type": "object", "required": ["id", "email"] }additionalPropertiesObjectsGilt für: objectSchema or boolean controlling unknown properties
{ "type": "object", "additionalProperties": false }ℹ false = no extra properties allowed; a schema validates extra properties
patternPropertiesObjectsGilt für: objectSchemas applied to properties whose name matches the regex key
{ "patternProperties": { "^S_": { "type": "string" } } }minProperties / maxPropertiesObjectsGilt für: objectMin/max number of properties in the object
{ "type": "object", "minProperties": 1, "maxProperties": 10 }items (draft-07)ArraysGilt für: 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)ArraysGilt für: arrayPer-index schemas for a tuple
{ "type": "array", "prefixItems": [{ "type": "string" }, { "type": "number" }] }ℹ Replaces tuple form of items from draft-07
minItems / maxItemsArraysGilt für: arrayMin/max number of array elements
{ "type": "array", "minItems": 1, "maxItems": 50 }uniqueItemsArraysGilt für: arrayAll items must be unique
{ "type": "array", "items": { "type": "string" }, "uniqueItems": true }containsArraysGilt für: arrayAt least one item must match the given schema
{ "type": "array", "contains": { "const": "admin" } }ℹ Use minContains / maxContains to control how many must match
allOfCompositionGilt für: anyValue must be valid against ALL listed schemas
{ "allOf": [{ "type": "string" }, { "minLength": 5 }] }ℹ Intersection — use for schema composition/extension
anyOfCompositionGilt für: anyValue must be valid against AT LEAST ONE listed schema
{ "anyOf": [{ "type": "string" }, { "type": "number" }] }oneOfCompositionGilt für: anyValue must be valid against EXACTLY ONE listed schema
{ "oneOf": [{ "type": "string" }, { "type": "number" }] }ℹ Validates all and ensures exactly one matches — slower than anyOf
notCompositionGilt für: anyValue must NOT be valid against the given schema
{ "not": { "type": "null" } }if / then / elseCompositionGilt für: 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-Schlüsselwörter sind Standardeigenschaften zur Definition von Datentypen, Formaten und Einschränkungen, wie $ref, properties, required und type.
Mit dem $ref-Schlüsselwort können Sie andere Schemadefinitionen referenzieren und wiederverwendbare Schema-Komponenten erstellen.
properties definiert die Eigenschaften eines Objekts, während required ein Array ist, das angibt, welche dieser Eigenschaften Pflichtfelder sind.
JSON Schema hat sich durch mehrere Versionen (Draft-04, Draft-07, 2019-09, 2020-12) weiterentwickelt, wobei jede Version neue Schlüsselwörter und Funktionen hinzugefügt hat.