JSON에서 Python 데이터 클래스로 변환하기
JSON 샘플을 붙여넣으면 각 필드에 대한 타입 힌트가 포함된 @dataclass(또는 Pydantic 방식의 BaseModel) 결과를 얻을 수 있습니다. 적절한 경우 str, int, float, bool, Optional[...] 및 List[...] 형태로 출력되며, 중첩된 객체는 별도의 데이터 클래스로 처리됩니다. 출력 결과는 PEP 8 형식으로 제공되어 Python 파일에 바로 붙여넣을 수 있습니다.
JSON을 데이터 클래스로 변환하는 방법
-
1
JSON을 붙여넣으세요
단일 샘플만으로도 충분하며, 여러 샘플을 사용하면 어떤 필드가 null이 될 수 있는지 더 잘 감지할 수 있습니다.
-
2
스타일을 선택하세요
표준 라이브러리 `@dataclass`, Pydantic의 `BaseModel`, 또는 정적 타입 검사 전용인 `TypedDict` 중에서 선택하세요.
-
3
파이썬 버전을 선택하세요
`list[str]` 문법에는 3.9 이상, `|` 유니언 타입에는 3.10 이상, `Optional[...]` 및 `List[...]`에는 3.8 이상의 요구 사항이 적용됩니다.
-
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. 문법 및 동작 방식이 다릅니다(클래스
Config대model_config,validator대field_validator). 생성기는 기본적으로 v2 버전을 사용합니다. - 유니온 순서는 역직렬화에서 중요합니다. Pydantic은 타입을 선언 순서대로 시도하므로, 모호함이 발생할 수 있는 경우 가장 구체적인 타입을 먼저 지정하세요(예:
int를str보다 앞에 두기).
자주 묻는 질문
유효성 검증이 필요 없는 단순한 값 저장형용을 위한 데이터 클래스입니다. 런타임 유효성 검증, 강제 변환 또는 FastAPI 통합이 필요한 경우 Pydantic에서 사용합니다. 정적 타입 검사만 필요하며 클래스 인스턴스를 사용하지 않는 경우에는 TypedDict을 사용합니다(예: mypy, pyright).
| 유니언과 list[str] 문법이 기본 지원되는 Python 3.10 이상에서는 필요하지 않습니다. PEP 563의 문자열 주석을 통해 새 문법을 활용하려는 3.7~3.9 버전 프로젝트에 유용합니다. 필요한 경우 생성기가 경고를 표시합니다.
각 중첩 객체는 자체 클래스가 됩니다. 루트 클래스는 이름으로 이를 참조하므로 타입을 재사용할 수 있습니다. 순환 참조는 감지되어 표시됩니다.
네, Pydantic 방식을 선택하면 됩니다. FastAPI는 요청/응답 유형으로 Pydantic 모델을 직접 사용합니다. 내부 데이터 처리를 위해 @dataclass가 더 경량화되어 있습니다.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
색상 틴트 생성기
기준 색의 밝은 틴트를 생성합니다. 디자인 시스템 토큰, 배경, 호버 상태를 위한 3-20단계 스케일.
이메일 검증기
이메일 주소를 검증합니다. RFC 5322 구문 검사, 실시간 MX 레코드 조회, 그리고 로컬 파트, 도메인, 길이 정보를 제공합니다. 이메일은 전송되지 않습니다.
이 도구는 다른 언어로도 제공됩니다
- JSON ke Dataclass Python [ID]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON a Dataclass de Python [ES]
- JSON till Python-dataklass [SV]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON vers Dataclass Python [FR]
- JSON naar Python-dataclass [NL]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]