PHpullh

PYTHON · 파일/IO

JSON/YAML 파싱

json 모듈로 JSON 데이터를 파싱하고 직렬화합니다. 커스텀 인코더/디코더도 다룹니다.

파일/IO중급jsonJSON직렬화파싱

핵심 설명

json 모듈로 JSON 데이터를 파싱하고 직렬화합니다. 커스텀 인코더/디코더도 다룹니다.

Python code

import json
from datetime import datetime, date
from dataclasses import dataclass, asdict

# 기본 직렬화/역직렬화
data = {"name": "Alice", "scores": [90, 85, 92], "active": True}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

parsed = json.loads(json_str)
print(parsed["name"])

# 커스텀 인코더
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (datetime, date)):
            return obj.isoformat()
        if isinstance(obj, set):
            return list(obj)
        return super().default(obj)

data = {
    "created": datetime.now(),
    "tags": {"python", "json"},
}
print(json.dumps(data, cls=CustomEncoder, ensure_ascii=False))

# dataclass → JSON
@dataclass
class User:
    name: str
    age: int
    email: str

user = User("Alice", 30, "alice@test.com")
print(json.dumps(asdict(user), ensure_ascii=False))

# JSON 파일 읽기/쓰기
# with open("data.json", "w", encoding="utf-8") as f:
#     json.dump(data, f, ensure_ascii=False, indent=2)
# with open("data.json", "r", encoding="utf-8") as f:
#     loaded = json.load(f)

학습 팁

ensure_ascii=False를 설정하면 한글이 이스케이프되지 않고 그대로 출력됩니다.

주의할 점

json.dumps()는 기본적으로 datetime, set 등을 직렬화할 수 없습니다. 커스텀 인코더가 필요합니다.

자주 묻는 질문

JSON/YAML 파싱란 무엇인가요?

json 모듈로 JSON 데이터를 파싱하고 직렬화합니다. 커스텀 인코더/디코더도 다룹니다.

JSON/YAML 파싱 학습 시 주의할 점은 무엇인가요?

json.dumps() 는 기본적으로 datetime, set 등을 직렬화할 수 없습니다. 커스텀 인코더가 필요합니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.