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 메타데이터를 가집니다.