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など複数のバージョンに進化しており、各バージョンで新しいキーワードと機能が追加されています。