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です。