Development/Python
Object of type UUID is not JSON serializable
폴피드
2025. 5. 27. 11:20
Python 을 사용하면서 UUID 를 api 의 body 로 전달 할 경우 다음과 같은 에러가 발생할 때가 있다.
Object of type UUID is not JSON serializable
Body 로 전달하기 위해 Json 으로 직렬화 시에 UUID 가 직렬화 되지 않아서 발생하는 에러이다. 보통 다음과 같이 body 를 전달할 때 에러가 난다.
requests.post(..., data=json.dumps(model.dict()))
1. model.json() 사용하기 ← 가장 쉽고 깔끔한 해결책
import requests
from models import MyRequestModel # BaseModel 상속 클래스
from uuid import uuid4
payload = MyRequestModel(id=uuid4(), name="홍길동")
res = requests.post(
url="http://example.com/api",
headers={"Content-Type": "application/json"},
data=payload.json() # ✅ 핵심!
)
2. 꼭 dict()를 써야 하는 경우 → json.dumps(..., default=str)
import json
json_str = json.dumps(payload.dict(), default=str)
추가적으로 알아야될 사항으로 body 에 data 가 아닌 json 으로 넣을 경우 자동으로 json.dumps 가 호출되지만 default=str 을 지정할 수가 없다. 따라서 data 로 설정해야 한다.
3. 한글 변환 차이
직렬화 방식 한글 출력 형태 차이 원인
model.json() | 한글 그대로 출력 | ensure_ascii=False 기본 적용 |
json.dumps(..., default=str) | 한글이 \ud55c\uae00처럼 유니코드 이스케이프됨 | ensure_ascii=True가 기본값 |
728x90
반응형