Object of type datetime is not JSON serializable

2023. 7. 14. 16:47it

반응형

해당 에러는 주로 아래와 같은 상황에서 나타난다. 

 

import datetime
import json

data = {'time' : datetime.datetime.now()}
json.dumps(data)

 

해당 에러는 datetime 데이터를 직렬화 하지 못해서 생기는 에러이다. 

 

json.dumps(data) 뒤에 옵션을 하나만 주면 되는데, 항상 그 옵션을 잊어버려 정리한다. 

 

반응형

 

 

 

1. 옵션을 직접 만들어서 사용하기

import json
from datetime import datetime

# datetime 객체를 문자열로 변환하는 함수

def datetime_to_string(obj):
    if isinstance(obj, datetime):
        return obj.__str__()

# JSON 직렬화
data = {
    'timestamp': datetime.now(),
    'message': 'Hello, world!'
}

json_data = json.dumps(data, default=datetime_to_string)
print(json_data)

 

2. bson를 활용하기

import json
from datetime import datetime
from bson import json_util

# JSON 직렬화
data = {
    'timestamp': datetime.now(),
    'message': 'Hello, world!'
}

json_data = json.dumps(data, default=json_util.default)
print(json_data)

 

나는 주로 2번을 활용한다. 이유는 코드라인을 줄일수 있어서 그렇다. 

 

단점이 있다면 'pip install bson'를 해야 한다는 점이다 

 

pip install bson
반응형