dusual dusual - 6 months ago 28
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

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
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?


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.