本文へスキップ
ToolMug

JSON → JSON Schema 生成ツール

JSON のサンプルを貼り付けると、それを表す JSON Schema を生成します。型、ネストしたオブジェクト、配列の要素、どのキーが必須かを記述します。バリデーション、フォーム、API ドキュメントのたたき台として使えます。

ブラウザ内で動作 — 入力した内容はアップロードされません

使い方

  1. JSON のサンプルを貼り付けるか、「サンプルを読み込む」をクリックします。
  2. ルートスキーマのタイトルを設定します。
  3. スキーマをコピーまたはダウンロードし、format、pattern、値の範囲などの制約を追加します。

オプションの説明

ルート型の名前
スキーマの title として使われます。

例

{"id": 1, "email": null} からは、"id": {"type": "integer"} と "email": {"type": "null"} を持ち、両方のキーが required に入ったスキーマが作られます。

例

メールがあるのは 1 件目だけで、manager が null のことがある、2 つのユーザーレコードです。

[
  { "id": 1, "name": "Ada", "email": "ada@example.com", "tags": ["admin"], "manager": null },
  { "id": 2, "name": "Grace", "tags": [], "manager": { "id": 1 } }
]

ルートの型名を User にすると、生成されるスキーマは次のとおりです。

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "User",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": { "type": "integer" },
      "name": { "type": "string" },
      "email": { "type": "string" },
      "tags": { "type": "array", "items": { "type": "string" } },
      "manager": {
        "anyOf": [
          { "type": "null" },
          { "type": "object", "properties": { "id": { "type": "integer" } }, "required": ["id"] }
        ]
      }
    },
    "required": ["id", "name", "tags", "manager"]
  }
}

email は 2 件目のレコードにないので required に含まれません。manager は、サンプルに null とオブジェクトの両方があるため、どちらも受け付けます。サンプルデータが多様なほどスキーマは正確になるので、1 件ではなく複数のレコードを貼り付けてください。

よくある使い方

API 入力の検証。 スキーマを Ajv (JavaScript) や jsonschema (Python) などのバリデーターに読み込み、一致しないリクエストを拒否します。

API のドキュメント化。 プロパティを OpenAPI の components.schemas セクションに貼り付けて、たたき台にします。

エディターの入力補完。 VS Code や JetBrains の IDE は JSON Schema を使って、JSON の設定ファイルでキーを提案したり、間違いを指摘したりできます。

よくある質問

どのキーが必須(required)になりますか?

すべてのサンプルオブジェクトに含まれるキーです。配列に異なるキーを持つオブジェクトが含まれる場合、一部の要素にないキーは required から除外されます。

OpenAPI で使えますか?

OpenAPI 3.1 は JSON Schema 2020-12 を使用しているため、生成したスキーマを components/schemas の下にそのまま置けます。OpenAPI 3.0 の場合は、["string", "null"] のような type の配列を nullable true に置き換えてください。

email や date-time などの format を検出しますか?

いいえ。推測するのは型だけです。必要に応じて format、pattern、minimum などのキーワードを手動で追加してください。

JSON はアップロードされますか?

いいえ。スキーマはブラウザ内で生成されるため、実データを含む API レスポンスも端末の外に出ません。

プライバシー

このツールはすべてブラウザ内で動作します。ファイルやテキストはお使いの端末上で処理され、当サイトのサーバーにアップロードされることはありません。

関連ツール