シンプルなJSONからPython Dataclassへの変換

フラットなJSONオブジェクトを適切に型付けされたフィールドを持つPython dataclassに変換する方法を学びます。str、int、float、boolの型アノテーションを解説します。

Dataclasses

詳細な説明

JSONからPython Dataclassへ

最もシンプルな変換は、フラットなJSONオブジェクトをPythonの @dataclass に変換することです。各JSONキーは値から推論された型アノテーション付きのフィールドになります。

JSONの例

{
  "id": 42,
  "name": "Alice",
  "email": "alice@example.com",
  "active": true,
  "score": 98.5
}

生成されるPython

from dataclasses import dataclass

@dataclass
class User:
    id: int
    name: str
    email: str
    active: bool
    score: float

型マッピングルール

JSON型 Python型
string str
number (整数) int
number (小数) float
boolean bool
null None

Pythonは intfloat を区別するため、42int に、98.5float にマッピングされます。これはTypeScriptのように単一の number 型を使用する言語よりも正確です。

なぜDataclassなのか?

Dataclass(Python 3.7で導入)は以下を提供します:

  • 自動生成される __init__ — ボイラープレートのコンストラクタが不要です。
  • __repr____eq__ — デバッグとテストに便利です。
  • 型アノテーション — IDEの自動補完とmypyやpyrightによる静的解析が可能です。
  • イミュータビリティオプションfrozen=True を設定して不意の変更を防げます。

使用方法

import json

data = json.loads('{"id": 42, "name": "Alice", "email": "alice@example.com", "active": true, "score": 98.5}')
user = User(**data)
print(user.name)  # "Alice"

シンプルなdataclassはすべてのJSON-to-Python変換の基礎です。このパターンを理解すれば、ネストされたオブジェクト、オプショナルフィールド、複雑な構造への展開は自然に進められます。

ユースケース

REST APIからJSONペイロードを受け取り、IDEの自動補完が効き、mypyでタイプミスを検出でき、デバッグ時にクリーンな__repr__を提供する型安全なPythonクラスが必要な場合に使用します。

試してみる — JSON to Python Converter

フルツールを開く