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+の構文をターゲットとし、小文字の listdicttupleset を直接使用します。

型付きリストの反復

for user in data.users:
    print(user.name)  # IDEはuserがUserであることを認識し、自動補完を提供

型アノテーション付きリストは、ループ、内包表記、map/filterチェーン内で適切な自動補完を提供します。

ユースケース

ユーザーオブジェクトの配列を返すページネーション付きAPIを消費しており、mypyがリスト内包表記やループ変数を検証するためにPython型アノテーションが必要な場合に使用します。

試してみる — JSON to Python Converter

フルツールを開く