実際のペイロードからJSON Schemaの草案を作る

スキーマを手で書くと自分のデータを想像で書きがちです。実際のJSONからdraft 2020-12のスキーマを推論し、そこから締めていきます。

このガイドで使う道具

やりたいこと

APIのレスポンスや設定の塊など、動いているJSONがあり、検証やドキュメント用のスキーマが必要です。構造はすでに存在しており、手で書き写すのは転記作業です。

構造を推論する

サンプルを貼って生成します。各オブジェクトはpropertiesマップになり、配列は要素全体をマージしたitemsスキーマになり、スカラーは整数と数値を区別して記録されます。

  • format検出をオンにすると文字列にdate-time・date・uuid・email・uriが付きます。
  • requiredにはその型のすべてのオブジェクトに存在したキーだけが入ります。

具体例

name・email・2つの文字列タグの配列・nullのmiddle_nameを持つユーザーレコードは、それぞれのプロパティに展開されます。tagsはitems.type "string"、middle_nameはtype "null"になり、format検出をオンにすればemailに"format": "email"が付きます。

草案として扱う

推論が見るのは「存在したもの」で「許されるもの」ではありません。サンプルでnullだったフィールドが本来文字列であることも、サンプルに無かった任意キーもあります。出力はサンプルの記録として読み、実際の契約が緩い部分は型を広げてください。

  • 入力500KBまで。サンプルは解析されるだけで送信されません。
  • formatはヒューリスティックです。メールに見える文字列は、APIがただの不透明な文字列として扱う場合でもemailと付きます。