JSON에서 Python 데이터 클래스로 변환하기

JSON 샘플을 붙여넣으면 각 필드에 대한 타입 힌트가 포함된 @dataclass(또는 Pydantic 방식의 BaseModel) 결과를 얻을 수 있습니다. 적절한 경우 str, int, float, bool, Optional[...]List[...] 형태로 출력되며, 중첩된 객체는 별도의 데이터 클래스로 처리됩니다. 출력 결과는 PEP 8 형식으로 제공되어 Python 파일에 바로 붙여넣을 수 있습니다.

JSON을 데이터 클래스로 변환하는 방법

  1. 1

    JSON을 붙여넣으세요

    단일 샘플만으로도 충분하며, 여러 샘플을 사용하면 어떤 필드가 null이 될 수 있는지 더 잘 감지할 수 있습니다.

  2. 2

    스타일을 선택하세요

    표준 라이브러리 `@dataclass`, Pydantic의 `BaseModel`, 또는 정적 타입 검사 전용인 `TypedDict` 중에서 선택하세요.

  3. 3

    파이썬 버전을 선택하세요

    `list[str]` 문법에는 3.9 이상, `|` 유니언 타입에는 3.10 이상, `Optional[...]` 및 `List[...]`에는 3.8 이상의 요구 사항이 적용됩니다.

  4. 4

    코드를 복사하세요

    루트 클래스와 그 안에 포함된 클래스들을 하나로 구성한 후, `.py` 파일에 붙여넣고 가져오세요.

예시 출력: 표준 @dataclass

입력:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

출력(Python 3.10 이상):

from dataclasses import dataclass, field
from typing import Optional


@dataclass
class User:
    first_name: str
    age: int
    tags: list[str] = field(default_factory=list)
    email: Optional[str] = None

Pydantic에서 동일한 입력

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

타입 매핑

JSON 값 파이썬 타입
문자열 str
정수 int
숫자 (소수) float
논리값 bool
null (단독으로 표시됨) None
null + 기타 유형 Optional[T]
ISO 날짜 문자열 date (Python 3.7+ 이상)
ISO 날짜 및 시간 datetime
하나의 유형으로 구성된 배열 list[T]
혼합 배열 list[Union[T1, T2]]
객체 중첩 클래스

데이터 클래스 vs Pydantic vs TypedDict

종류 사용 시기
@dataclass 표준 라이브러리 솔루션, 실행 시 검증 없음
Pydantic 런타임 검증 및 강제 변환(FastAPI, 설정)
TypedDict 정적 타입 검사만 수행하며 인스턴스 클래스는 없음
attrs attrs를 표준으로 삼은 레거시 프로젝트들

흔한 오류

  • 가변 기본값에 default_factory를 잊는 경우. list[str] = [] 기본값은 인스턴스 전반에 공유되는 데이터 클래스의 함정입니다. 대신 field(default_factory=list)를 사용하세요.
  • 기본값 없는 Optional. = None이 없는 email: Optional[str]은 여전히 해당 인수가 필요합니다. JSON의 의미와 일치시켜 주세요.
  • Pydantic v1 대 v2. 문법 및 동작 방식이 다릅니다(클래스 Configmodel_config, validatorfield_validator). 생성기는 기본적으로 v2 버전을 사용합니다.
  • 유니온 순서는 역직렬화에서 중요합니다. Pydantic은 타입을 선언 순서대로 시도하므로, 모호함이 발생할 수 있는 경우 가장 구체적인 타입을 먼저 지정하세요(예: intstr보다 앞에 두기).

자주 묻는 질문

유효성 검증이 필요 없는 단순한 값 저장형용을 위한 데이터 클래스입니다. 런타임 유효성 검증, 강제 변환 또는 FastAPI 통합이 필요한 경우 Pydantic에서 사용합니다. 정적 타입 검사만 필요하며 클래스 인스턴스를 사용하지 않는 경우에는 TypedDict을 사용합니다(예: mypy, pyright).

| 유니언과 list[str] 문법이 기본 지원되는 Python 3.10 이상에서는 필요하지 않습니다. PEP 563의 문자열 주석을 통해 새 문법을 활용하려는 3.7~3.9 버전 프로젝트에 유용합니다. 필요한 경우 생성기가 경고를 표시합니다.

각 중첩 객체는 자체 클래스가 됩니다. 루트 클래스는 이름으로 이를 참조하므로 타입을 재사용할 수 있습니다. 순환 참조는 감지되어 표시됩니다.

네, Pydantic 방식을 선택하면 됩니다. FastAPI는 요청/응답 유형으로 Pydantic 모델을 직접 사용합니다. 내부 데이터 처리를 위해 @dataclass가 더 경량화되어 있습니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다