JSON-кодирование пользовательских объектов

Если мы просто попробуем следующее:

 import json
from datetime import datetime
data = {'datetime': datetime(2016, 9, 26, 4, 44, 0)}
print(json.dumps(data)) 

мы получаем ошибки говоря TypeError: datetime.datetime(2016, 9, 26, 4, 44) is not JSON serializable .

Чтобы правильно сериализовать объект datetime, нам нужно написать собственный код для его преобразования:

 class DatetimeJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        try:
            return obj.isoformat()
        except AttributeError:
            # obj has no isoformat method; let the builtin JSON encoder handle it
            return super(DatetimeJSONEncoder, self).default(obj) 

а затем использовать этот класс кодировщика вместо json.dumps :

 encoder = DatetimeJSONEncoder()
print(encoder.encode(data))
# prints {"datetime": "2016-09-26T04:44:00"}