JSONレスポンスをPythonのdataclassに変換する

全フィールドを手書きせずに型付きAPIコードを。レスポンスを貼れば、必要な箇所にOptionalが付いた@dataclassが出ます。

このガイドで使う道具

やりたいこと

Pythonは型なしでもJSONを処理できますが、補完・リファクタ・テストfixtureが欲しくなった時に必要です。実レスポンスからdataclassの骨格を生成すれば、30個のキーを手で転記せずに型付きフィールドが得られます。

サンプルからクラスへ

JSONを貼って生成します。オブジェクトはキー名から命名された@dataclassになり、リストはマージされた要素型のlist[T]になり、一部のオブジェクトにないフィールドはOptionalになります。

  • snake_caseのJSONキーはそのまま保持されます — Pythonのフィールド名はワイヤキーを反映するので、json.loadsの出力をそのまま流し込めます。
  • 混合型の配列(1と"a"の混在)はAnyに降格します — サンプルを直すか広い型を受け入れてください。

使う前の確認

骨格は構造について正確ですが型の幅は限定的です。全整数の列が実はfloatかもしれず、nullに見えるフィールドはそのサンプルに無かっただけかもしれません。入力上限は2,000,000文字・深さ40です。