ネストされたオブジェクトからのJSON Schema生成

サブオブジェクトを持つ深くネストされたJSONオブジェクトのJSON Schemaを生成します。ジェネレーターが子プロパティを再帰的に処理する仕組みを学びます。

Object Schemas

詳細な説明

ネストされたオブジェクトのスキーマ生成

実世界のJSONはフラットであることは稀です。ジェネレーターはネストされたオブジェクトに再帰的に処理し、データ構造の全深度を反映するスキーマを生成する必要があります。

ネスト生成の仕組み

以下のような入力の場合:

{
  "user": {
    "name": "Alice",
    "address": {
      "street": "123 Main St",
      "city": "Springfield",
      "zip": "62704"
    }
  }
}

ジェネレーターはネストされた properties ブロックを持つスキーマを生成します:

{
  "type": "object",
  "properties": {
    "user": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "address": {
          "type": "object",
          "properties": {
            "street": { "type": "string" },
            "city": { "type": "string" },
            "zip": { "type": "string" }
          },
          "required": ["street", "city", "zip"]
        }
      },
      "required": ["name", "address"]
    }
  },
  "required": ["user"]
}

深さの処理

各ネストされたオブジェクトは、独自の propertiesrequired 配列を持つ独立したミニスキーマとして扱われます。

$ref を使うべき場合

同じサブオブジェクト形状が複数の場所に現れる場合(例: 同じ構造を共有する billingAddressshippingAddress)、インライン化は重複につながります。そのような場合は、共有形状を $defs ブロックに抽出し、$ref で参照します。

大きなネスト構造のヒント

  • 可能な限りフラット化: 深くネストされたスキーマは保守が難しくなります。
  • descriptionを追加: ネストされたプロパティは自己文書化が不十分です。各レベルに description フィールドを追加しましょう。
  • 段階的に検証: 完全なスキーマを組み立てる前に、各ネストレベルを個別にテストしましょう。

ユースケース

埋め込みアドレスを持つユーザープロファイル、注文明細を持つ注文オブジェクト、またはRESTやGraphQL APIが返す階層的なデータ構造をモデリングする際にネストされたスキーマを生成します。

試してみる — JSON Schema Generator

フルツールを開く