JSONからPythonデータクラスへの変換
JSONサンプルを貼り付けると、各フィールドに対する型ヒントが付いた@dataclass(またはPydanticのBaseModel)が生成されます。適切な場所にはstr、int、float、bool、Optional[...]およびList[...]が含まれます。ネストされたオブジェクトはそれぞれ独立したデータクラスとして扱われます。出力結果はPEP 8形式で、Pythonファイルに貼り込む準備ができています。
JSONをデータクラスに変換する方法
-
1
JSONを貼り付けます
1つのサンプルで十分です。複数のサンプルを使用すると、どのフィールドがnullになり得るかの検出精度が向上します。
-
2
スタイルを選択してください
標準ライブラリの`@dataclass`、Pydanticの`BaseModel`、または静的な型チェック専用の`TypedDict`から選びます。
-
3
Pythonバージョンを選択してください
`list[str]`の構文には3.9以上、`|`のユニオン型には3.10以上、`Optional[...]`および`List[...]`には3.8が必要です。
-
4
コードをコピーします
1つのルートクラスとネストされたクラスを指定します。`.py`ファイルに貼り付け、インポートしてください。
サンプル出力:標準 @dataclass
入力:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
出力(Python 3.10以上):
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class User:
first_name: str
age: int
tags: list[str] = field(default_factory=list)
email: Optional[str] = None
Pydanticで同じ入力
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
タイプマッピング
| JSON値 | Pythonの型 |
|---|---|
| 文字列 | str |
| 整数 | int |
| 数値(小数) | float |
| ブール値 | bool |
| null(単独で表示) | None |
| null + その他のタイプ | Optional[T] |
| ISO日付文字列 | date(Python 3.7+) |
| ISO日時 | datetime |
| 1種類の配列 | list[T] |
| 混在した配列 | list[Union[T1, T2]] |
| オブジェクト | ネストされたクラス |
データクラス vs Pydantic vs TypedDict
| 種類 | 使用する場面 |
|---|---|
@dataclass |
標準ライブラリによる解決策。実行時の検証なし |
| Pydantic | 実行時の検証および強制変換(FastAPI、設定) |
TypedDict |
静的型チェックのみ、インスタンスクラスは生成しない |
attrs |
attrsで標準化されたレガシープロジェクト |
よくある間違い
- 可変なデフォルト値に
default_factoryを忘れる。list[str] = []というデフォルト値はインスタンス間で共有されるデータクラスの落とし穴です。field(default_factory=list)を使用してください。 - デフォルト値のないOptional。
email: Optional[str]だけでは= Noneが付いていない限り、依然として引数が必須です。JSONの意味に合わせてください。 - Pydantic v1とv2の違い。 構文と動作が異なります(クラス
Config対model_config、validator対field_validator)。ジェネレータはデフォルトでv2を使用します。 - ユニオンの順序はデシリアライズにおいて重要です。 Pydanticは宣言順に型を試します。曖昧さが生じ得る場合は、最も具体的な型を先に指定してください(例:
intをstrの前に指定)。
よくある質問
検証機能を備えないシンプルな値保持型用のデータクラスです。実行時での検証、強制変換、またはFastAPIとの統合が必要な場合はPydanticを使用します。静的な型チェックのみが必要でクラスインスタンスを必要としない場合はTypedDictを使用します(mypy、pyrightなど)。
Python 3.10以降では|ユニオンやlist[str]構文がネイティブに使えるため不要です。PEP 563の文字列アノテーションを使って新しい構文を利用する3.7~3.9のプロジェクトでは役立ちます。必要な場合はジェネレータが警告を表示します。
各ネストされたオブジェクトはそれぞれ独立したクラスとなります。ルートクラスは名前を参照することでこれらを呼び出し、型の再利用が可能です。循環参照は検出され、フラグが設定されます。
はい、Pydantic形式を選択した場合に使えます。FastAPIはPydanticモデルを直接リクエスト/レスポンスの型として使用します。内部でのデータのやり取りには、@dataclassの方が軽量です。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
メールアドレス検証ツール
メールアドレスを検証します。RFC 5322構文チェック、MXレコードのライブ確認に加え、ローカル部、ドメイン、長さの詳細を表示します。メールは送信されません。
EditorConfig ジェネレーター
インデントのスタイルとサイズ、改行コード、文字コード、空白ルールを指定して .editorconfig ファイルを生成し、IDE やエディタをまたいで書式を統一できます。
このツールは他の言語でも利用できます
- JSON ke Dataclass Python [ID]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON till Python-dataklass [SV]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]