チュートリアル

JSON Schema 実践例:オブジェクト、配列、列挙型、条件分岐

必須項目、ネストしたオブジェクト、配列、enum、再利用可能な定義、条件付き検証を、コピーして試せる JSON Schema 例で解説します。

2026-07-2910分

JSON Schema は JSON データの構造と制約を記述します。API 契約、設定ファイル、インポート処理のルールを機械的に検証できる形にするために使えます。

オブジェクトと必須項目

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "status"],
  "properties": {
    "id": { "type": "string", "minLength": 1 },
    "status": { "enum": ["pending", "active", "disabled"] }
  },
  "additionalProperties": false
}

additionalProperties: false は誤字や予期しないキーの検出に便利です。ただし、将来フィールドが増える公開 API では互換性を考えて使用してください。

ネストしたオブジェクト

{
  "type": "object",
  "required": ["name", "address"],
  "properties": {
    "name": { "type": "string" },
    "address": {
      "type": "object",
      "required": ["country", "postalCode"],
      "properties": {
        "country": { "type": "string", "minLength": 2 },
        "postalCode": { "type": "string", "pattern": "^[A-Za-z0-9 -]+$" }
      },
      "additionalProperties": false
    }
  }
}

正規表現は文字列の形だけを確認します。住所が実在するか、在庫があるかといった事実はアプリケーション側で検証します。

配列と要素

{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "required": ["sku", "quantity"],
    "properties": {
      "sku": { "type": "string", "minLength": 1 },
      "quantity": { "type": "integer", "minimum": 1 }
    }
  }
}

uniqueItems は JSON 値全体を比較します。特定フィールドだけの一意性は、通常アプリケーションやデータベースで保証します。

$defs で定義を再利用する

{
  "$defs": {
    "money": {
      "type": "object",
      "required": ["amount", "currency"],
      "properties": {
        "amount": { "type": "number", "minimum": 0 },
        "currency": { "type": "string", "pattern": "^[A-Z]{3}$" }
      }
    }
  },
  "type": "object",
  "properties": {
    "subtotal": { "$ref": "#/$defs/money" },
    "total": { "$ref": "#/$defs/money" }
  }
}

金額を正確に扱う必要がある場合は、10進文字列または最小通貨単位の整数を検討してください。

条件付き必須項目

{
  "type": "object",
  "required": ["deliveryMethod"],
  "properties": {
    "deliveryMethod": { "enum": ["pickup", "shipping"] },
    "shippingAddress": { "type": "string" },
    "pickupLocationId": { "type": "string" }
  },
  "allOf": [
    {
      "if": { "properties": { "deliveryMethod": { "const": "shipping" } } },
      "then": { "required": ["shippingAddress"] },
      "else": { "required": ["pickupLocationId"] }
    }
  ]
}

Schema は読みやすく保ちましょう。権限やワークフロー全体はアプリケーションコードの責務です。

実務での進め方

  1. 正常・異常の代表サンプルを用意する。
  1. JSON Schema Generatorで土台を作る。
  1. 実際の契約に基づいて required と境界条件を追加する。
  1. 欠落、型違い、余分なキー、空配列をテストする。
  1. Schema をバージョン管理し、自動テストで実行する。

キーワードと draft の動作は JSON Schema 公式ガイドで確認できます。生成結果は出発点であり、最終的なルールは業務要件を表す必要があります。

Ene Chen

開発者に最高のJSON処理ツールを提供することに専念

関連投稿

さらに多くの投稿が近日公開予定...

ブログに戻る

関連ツール

よくある質問

更新の追い方、扱うトピック、リクエストについて。

新着記事を見逃さないには?

このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。

どんな内容が中心ですか?

JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。

チュートリアル題材の提案はできますか?

はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。