JSONをJSONスキーマに変換 — Numio
JSON のサンプルから JSON Schema(draft-07)を推論します。オブジェクトの配列では全要素をマージし、一部の要素で欠けているか null のキーは required から外します。
取得したサンプルから、API レスポンスや webhook ペイロードの最初の検証用スキーマを作る。
こんなときに使えます
- 取得したサンプルから、API レスポンスや webhook ペイロードの最初の検証用スキーマを作る。
- Ajv、OpenAPI、または JSON Schema → TypeScript/Zod の工程に渡すスキーマを作る。
使い方
- JSON のサンプルを左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。複数レコードの配列を使うと required のリストがより正確になります。
- スキーマを確認します。単一オブジェクトのキーはすべて必須で、一部の配列要素で欠けているか null のキーは任意になります。
- スキーマをコピーし、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 スキーマにマージされます。