为什么json序列化不适用于datetime对象。据我了解json序列化,任何对象的基本思想都可以调用 __str__内置函数,然后对作为响应得到的对象进行urlencode。但是在日期时间的情况下,我得到以下错误
__str__
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
虽然有__str__一种方法可以将已经可用的对象进行字符串化,但是似乎有意识地决定不这样做,为什么会这样呢?
不,它在json模块中无法正常工作。该模块为您提供了默认的编码器:json.JSONEncoder。您需要扩展它以提供default序列化对象的方法的实现。像这样:
json
json.JSONEncoder
default
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)
正如其他人正确指出的那样,原因是json的标准未指定如何表示日期时间。