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
반응형