本文へスキップ

JSONをJSONスキーマに変換 — Numio

JSON のサンプルから JSON Schema(draft-07)を推論します。オブジェクトの配列では全要素をマージし、一部の要素で欠けているか null のキーは required から外します。

取得したサンプルから、API レスポンスや webhook ペイロードの最初の検証用スキーマを作る。

JSON

JSON Schema

こんなときに使えます

  • 取得したサンプルから、API レスポンスや webhook ペイロードの最初の検証用スキーマを作る。
  • Ajv、OpenAPI、または JSON Schema → TypeScript/Zod の工程に渡すスキーマを作る。

使い方

  1. JSON のサンプルを左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。複数レコードの配列を使うと required のリストがより正確になります。
  2. スキーマを確認します。単一オブジェクトのキーはすべて必須で、一部の配列要素で欠けているか null のキーは任意になります。
  3. スキーマをコピーし、format、enum、integer、minimum など、サンプルからはわからない制約を追加します。

JSON サンプル

[
  { "id": 1, "name": "Ada", "email": null },
  { "id": 2, "name": "Lin", "email": "lin@example.com" }
]

JSON Schema(draft-07)

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Generated schema for Root",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "email": {
        "type": "string"
      }
    },
    "required": [
      "id",
      "name"
    ]
  }
}

仕様と制限

数値は常に "type": "number" です。integer、フォーマット(email、date-time)、enum、pattern は推論されません。title は常に "Generated schema for Root" です。

すべての箇所で null のフィールドは空のスキーマ {} になります。他の値と並ぶ null は、null 型ではなく任意として扱われます。

[1, "x"] のような型の混在した配列はタプル(items のリストと additionalItems: false)になり、空配列は items: {} になります。

WebAssembly にコンパイルされた json_typegen によりブラウザ内で生成されます。不正な JSON(末尾カンマを含む)は JSON の解析エラーを表示し、42 のような単一の値は構造がないため拒否されます。

FAQ

どの JSON Schema ドラフトで出力されますか?

Draft-07 で、"$schema": "http://json-schema.org/draft-07/schema#" と宣言されます。2019-09 や 2020-12 を選ぶオプションはありません。

任意のフィールドはどう判定されますか?

同じ配列の要素間でのみ判定します。一部のオブジェクトで欠けているか null のキーは required から外されます。単一オブジェクトではすべてのキーが必須です。

ルートが JSON 配列でも変換できますか?

はい。例のように、ルートは "type": "array" になり、要素は 1 つの items スキーマにマージされます。

仕様を確認する