配列要素の型制約 — JSON SchemaのitemsキーワードO

JSON Schemaの items キーワードで配列の各要素の型やスキーマを定義する方法を解説します。

Array Constraints

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "userIds": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "minItems": 1,
      "maxItems": 100
    },
    "emails": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "email"
      }
    },
    "coordinates": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "number"
        },
        "minItems": 2,
        "maxItems": 2
      }
    }
  },
  "required": ["userIds"]
}

Test Data

{
  "userIds": [101, 202, 303, 404],
  "emails": ["alice@example.com", "bob@example.com"],
  "coordinates": [[37.7749, -122.4194], [40.7128, -74.006]]
}

詳細な説明

JSON Schemaの items キーワードは、配列の各要素が従うべきスキーマを定義します。全要素に同じスキーマを適用する場合に使用します。

基本的な使い方:

{
  "type": "array",
  "items": {
    "type": "string"
  }
}

このスキーマは文字列のみを要素とする配列を許可します。["a", "b", "c"] は有効ですが、["a", 1, true] は無効です。

複雑な要素スキーマ:

items にはオブジェクトスキーマも指定できます。例えば、ユーザーリストのバリデーション:

{
  "type": "array",
  "items": {
    "type": "object",
    "required": ["id", "name"],
    "properties": {
      "id": { "type": "integer" },
      "name": { "type": "string" }
    }
  }
}

これにより、配列の各要素が id(整数)と name(文字列)を持つオブジェクトであることが保証されます。

ユースケース

APIレスポンスのリストデータ、CSVインポート時の行データ、バッチ処理の入力データなどで配列要素の型を検証する際に使用します。

試してみる — JSON Schema Validator

フルツールを開く