欠落したレコードも含める
ルートはオブジェクト、またはオブジェクトだけを含む空でない配列にします。配列の最初の要素だけでなく全要素を調べるため、項目の違うサンプルをまとめると推定結果が変わります。
型定義の生成
値がnullの項目と、キー自体がない項目では、生成される既定値が異なります。
解析と生成はこのブラウザ内で行います。入力は送信・保存しません。
配列から要素モデルRootを定義します。Pydanticのload_modelsはオブジェクトと配列に対応します。
2クラス・null許容2フィールド
JSONからPythonでAPIレスポンスをモデルの草案にします。成功時のデータだけでなく、任意項目が省かれたレコードも一緒に渡すと、欠落の可能性を型定義に反映できます。
dataclass自動生成は、属性名や型を手書きする作業を減らします。ただし、サンプルから分かるのは観測できた構造だけです。入力検証や入れ子の読み込みが必要ならPydanticを選んでください。
JSONからPythonは、すべてのサンプルに存在するnull許容フィールドを必須のままにします。一部で欠落するキーにはNoneの既定値を付けます。Optional型だけでは「省略してよい」という意味になりません。
classや記号を含むキーは安全な属性名に変更します。元の表記はdataclassのmetadata、またはPydanticのaliasに記録。名前が衝突した場合も接尾辞で区別し、対応関係を残します。
ルートはオブジェクト、またはオブジェクトだけを含む空でない配列にします。配列の最初の要素だけでなく全要素を調べるため、項目の違うサンプルをまとめると推定結果が変わります。
ルートクラス名を決め、欠落キーのみか全フィールドを省略可能にするかを選択します。日付は既定でstrです。小数や指数表記を含む数値グループの精度が必要なら、生成前にDecimalへ切り替えます。
編集後350msで自動生成します。自動を切ると生成ボタンとCtrl/Cmd+Enterが使えます。編集直後は古い結果を保存できません。クリアとサンプル読み込みは、入力・設定・出力を一回戻せます。
標準ライブラリのdataclassと、固定バージョン2.12.5のPydanticを選べます。子クラスを親より先に並べ、dataclassでは必須フィールドを既定値付きの前に置きます。出力はPython 3.9以降で使えます。
整数だけのグループは任意精度のintです。小数・指数が混ざると既定でfloatとなり、同じグループの大きな整数も丸められる場合があります。DecimalモードのローダーはAnyの内部も含め、浮動小数点数を経由せず小数を解析します。
ISO推定では有効な年月日、またはタイムゾーン付きで小数秒が6桁以下の完全な日時を認識します。同じ位置のnull以外の文字列が同じ種類であることが条件です。不正な日付や時差のない日時はstrのままです。
属性はASCIIのsnake_caseになります。予約語、先頭の下線、model_*、BaseModelのメソッド名を避けます。空キー、絵文字、制御文字もaliasで保持します。インポート名も別名にして、Decimalなどのクラス名との衝突を防ぎます。
はい。空でない子オブジェクトは個別のクラスになり、同じファイルで親より先に定義されます。型定義ができても、dataclassが辞書を自動的に子インスタンスへ変換するわけではありません。
キーは安全なsnake_case属性へ変換されます。aliasが有効なら元のキーも残ります。Pydanticはそれを入力に使い、dataclassはmetadataに保存します。後者では自分で対応するアダプターを書く必要があります。
List[T]を生成します。同じ配列位置の全要素から型を推定し、オブジェクトのキーを結合します。空配列では要素型が分からないためList[Any]になります。ルート配列は空でなく、全要素がオブジェクトである必要があります。
nullだけでは具体的な型を決められずAnyになります。常に存在するキーなら必須のままです。他のサンプルに値があれば、その型にNoneを許容する注釈を付けられます。欠落している場合に初めて既定値を追加します。
独自の変換処理を書けば可能です。JSONからPythonのdataclass出力にはデコーダーがありません。json.loadsの結果から別名を対応させ、子クラスを明示的に組み立ててください。自動構築にはPydanticのload_modelsを使えます。
推定結果に改善点がありますか?