본문 바로가기

RestfulAPI

TypeError: Object of type ...is not JSON serializable 에러 발생 이유와 해결 방법

 


TypeError: Object of type ...is not JSON serializable 에러 발생 이유와 해결 방법

웹 개발을 하다 보면 JSON 형식으로 데이터를 주고받는 경우가 많습니다. 그러나 가끔씩 TypeError: Object of type ... is not JSON serializable 오류가 발생할 수 있습니다. 이 블로그에서는 이 오류가 발생하는 이유와 이를 해결하는 방법을 실습 예제와 함께 설명하겠습니다.

1. 오류 발생 이유

이 오류는 JSON 인코딩을 시도할 때 특정 객체 타입이 JSON으로 직렬화(serialize)할 수 없을 때 발생합니다. JSON은 문자열, 숫자, 배열, 불리언, null 등의 기본 데이터 타입만을 직렬화할 수 있습니다. 따라서, 사용자 정의 객체나 복잡한 데이터 타입을 JSON으로 변환할 수 없습니다.

오류 발생 예제


import json
from datetime import datetime

data = {
    "name": "Alice",
    "timestamp": datetime.now()
}

json_data = json.dumps(data)  # 여기서 오류 발생
    

해결 방법 1: 기본 데이터 타입으로 변환


import json
from datetime import datetime

data = {
    "name": "Alice",
    "timestamp": datetime.now().isoformat()  # datetime 객체를 문자열로 변환
}

json_data = json.dumps(data)
print(json_data)
    

해결 방법 2: 커스텀 인코더 사용


import json
from datetime import datetime

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

data = {
    "name": "Alice",
    "timestamp": datetime.now()
}

json_data = json.dumps(data, cls=CustomEncoder)
print(json_data)