今天处理mysql数据库数据时,从数据库中读取了datetime和date类型。不幸运的是默认的json库是不支持
datetime和date类型的序列化的。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
This module is used to provide a json-extend part for
datetime/date serialization.
@author Alex
@date 2015/03/29
"""
import json
from datetime import date
from datetime import datetime
class JsonExtendEncoder(json.JSONEncoder):
"""
This class provide an extension to json serialization for datetime/date.
"""
def default(self, o):
"""
provide a interface for datetime/date
"""
if isinstance(o, datetime):
return o.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(o, date):
return o.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, o)
if __name__ == '__main__':
d = {'now': datetime.now(), 'today': date.today(), 'i': 100}
ds = json.dumps(d, cls=JsonExtendEncoder)
print "ds type:", type(ds), "ds:", ds
l = json.loads(ds)
print "l type:", type(l), "ds:", l
因为json.dumps()出来的结果是一个字符串,所以如果这个结果要嵌套在另一个json结构中,
可以采用json.loads(ds)恢复成json的格式。这个时候使用的python的json默认库。
注意到使用json默认库之前,我们已经将datetime和date转换成了字符串了,这是合理的。
好了,到这里,我们就圆满的解决了问题。