dusual dusual - 1 month ago 10
JSON Question

Why does json serialization of datetime objects in python not work out of the box for datetime objects

Why does the json serialization not work for datetime objects . As I understand json serialization the basic idea for any object can be call the

__str__
builtin function and then urlencode the object that you get as a response. But in case of datetime i get the following error

TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable


while there is a
__str__
i.e a way of stringifying the object already available , But it seems like a conscious decision to not do it , why would that be the case?

Answer

No it doesn't work that way in json module. The module provides you with a default encoder: json.JSONEncoder. You need to extend this to provide your implementation of default method to serialize objects. Something like this:

import json
import datetime
from time import mktime

class MyEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return int(mktime(obj.timetuple()))

        return json.JSONEncoder.default(self, obj)

print json.dumps(obj, cls = MyEncoder)

As others correctly pointed out, the reason is that the standard for json does not specify how date time can be represented.