Python · Pydantic API models

Pydantic camelCase ↔ snake_case aliases

Pydantic の model field は snake_case のまま、外部 JSON だけ別の命名規則にできます。モデルが schema を所有する場合は再帰 dict 変換より alias generator が適しています。

Camel Case Converter 編集チーム 著公開日 2026/09/12最終レビュー

1つの外部規則には alias_generator を使用

from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel

class UserProfile(BaseModel):
    model_config = ConfigDict(
        alias_generator=to_camel,
        validate_by_alias=True,
        validate_by_name=True,
    )

    first_name: str
    created_at: str

profile = UserProfile.model_validate({
    "firstName": "Ada",
    "createdAt": "2026-09-12",
})

print(profile.first_name)
print(profile.model_dump(by_alias=True))
# {'firstName': 'Ada', 'createdAt': '2026-09-12'}

to_camel / to_snake などの built-in alias generator を model 全体に適用できます。model_dump(by_alias=True) で外部名を出力します。

validation と serialization が異なる場合は AliasGenerator

from pydantic import AliasGenerator, BaseModel, ConfigDict
from pydantic.alias_generators import to_camel, to_snake

class UserProfile(BaseModel):
    model_config = ConfigDict(
        alias_generator=AliasGenerator(
            validation_alias=to_camel,
            serialization_alias=to_snake,
        ),
        validate_by_alias=True,
    )

    first_name: str
    created_at: str

profile = UserProfile.model_validate({
    "firstName": "Ada",
    "createdAt": "2026-09-12",
})

print(profile.model_dump(by_alias=True))
# {'first_name': 'Ada', 'created_at': '2026-09-12'}

AliasGenerator では validation_alias と serialization_alias を別々に設定できます。

本番利用時の注意点

  • field-level alias は生成 alias より優先される場合があるため、例外を文書化してテストしてください。
  • Pydantic が payload を検証するなら model alias を優先し、未モデル化 JSON では再帰 dict 変換を検討します。
  • 生成された外部フィールド名を出力する場合は model_dump(by_alias=True) を使用します。
  • 外部 API の casing を Python business logic に漏らさず、model/serialization 境界に集約します。

JSON 境界をオンラインでテスト

ネスト、配列、除外キー、stop path、接頭辞、衝突、key-only diff をブラウザで確認できます。

.json ファイルをドロップ、または端末から選択

ファイルはブラウザ内でのみ読み取ります。最大 5 MB。

変換後 JSON
{
  "userProfile": {
    "firstName": "Ada",
    "createdAt": "2026-09-12"
  }
}

解析、ファイル読み込み、整形、キー変換はすべてブラウザ内で実行されます。JSON 入力は変換サーバーへ送信されません。