Python · Pydantic API models

Pydantic camelCase ↔ snake_case aliases

Python model field는 snake_case로 유지하면서 외부 JSON은 다른 네이밍 규칙을 사용할 수 있습니다. schema를 model이 소유한다면 재귀 dict 변환보다 alias generator가 적합합니다.

작성자 Camel Case Converter 편집팀게시 2026. 9. 12.마지막 검토

하나의 외부 규칙에는 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'}

Pydantic은 to_camel과 to_snake를 제공하며 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 alias가 생성 alias보다 우선할 수 있으므로 예외를 문서화하고 테스트하세요.
  • Pydantic이 payload를 이미 검증한다면 model alias를 우선하고, 모델 없는 JSON에는 재귀 dict 변환을 고려하세요.
  • 외부 field name으로 직렬화하려면 model_dump(by_alias=True)를 사용하세요.
  • 외부 API casing이 business logic에 퍼지지 않도록 model/serialization 경계에 naming policy를 두세요.

JSON 경계 온라인 테스트

중첩 객체, 배열, 제외 키, stop path, 접두사, 충돌, key-only diff를 구현 전에 확인하세요.

.json 파일을 놓거나 기기에서 선택

파일은 브라우저에서만 읽습니다. 최대 크기: 5 MB.

변환된 JSON
{
  "userProfile": {
    "firstName": "Ada",
    "createdAt": "2026-09-12"
  }
}

파싱, 파일 읽기, 포맷 및 키 변환은 모두 브라우저에서 로컬로 실행됩니다. JSON 입력은 변환 서버로 전송되지 않습니다.