JSON配列からPythonのlist型アノテーションへの変換
JSON配列をPythonのlist[T]型アノテーションに変換する方法を学びます。プリミティブのリスト、オブジェクトのリスト、ネストされたリスト構造を解説します。
Type Annotations
詳細な説明
JSON配列からPythonリストへ
JSON配列はPythonの list 型にマッピングされます。要素型は配列の内容から推論されます — 文字列は list[str] に、オブジェクトは list[SomeClass] になります。
プリミティブ配列
{
"tags": ["python", "json", "api"],
"scores": [95, 87, 92],
"weights": [0.5, 0.3, 0.2]
}
from dataclasses import dataclass
@dataclass
class Data:
tags: list[str]
scores: list[int]
weights: list[float]
オブジェクトの配列
{
"users": [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
}
@dataclass
class User:
id: int
name: str
@dataclass
class Root:
users: list[User]
空の配列
空のJSON配列 [] は曖昧です — コンバーターは要素型を判別できません。ほとんどのコンバーターは list[Any] をデフォルトとします。期待される型がわかったら手動で更新してください:
from typing import Any
items: list[Any] # コンバーターのデフォルト
items: list[str] # APIドキュメントを確認して手動修正
ネストされた配列
配列の配列(例:行列 [[1,2],[3,4]])はネストされたリスト型になります:
matrix: list[list[int]]
型構文のバージョン
| Pythonバージョン | 構文 |
|---|---|
| 3.7-3.8 | List[str](typing から) |
| 3.9+ | list[str](組み込み) |
コンバーターはデフォルトでPython 3.9+の構文をターゲットとし、小文字の list、dict、tuple、set を直接使用します。
型付きリストの反復
for user in data.users:
print(user.name) # IDEはuserがUserであることを認識し、自動補完を提供
型アノテーション付きリストは、ループ、内包表記、map/filterチェーン内で適切な自動補完を提供します。
ユースケース
ユーザーオブジェクトの配列を返すページネーション付きAPIを消費しており、mypyがリスト内包表記やループ変数を検証するためにPython型アノテーションが必要な場合に使用します。