python是一种很直接的语言,当我们从数据库拿出数据,兴冲冲准备序列化的时候,当的一声,报了个错:TypeError: datetime.datetime(...) is not JSON serializable
哈,是我大意了,至少有两种方法解决这个问题。
examples/python/datetime_json_fails.py
import json
import datetime
d = {
'name' : 'Foo'
}
print(json.dumps(d)) # {"name": "Foo"}
d['date'] = datetime.datetime.now()
print(json.dumps(d)) # TypeError: datetime.datetime(2016, 4, 8, 11, 22, 3, 84913) is not JSON serializable
# 有两个solution,一个是重写default函数,另一个是只写重写cls
# 第一种:
class DateTimeEncoder(json.JSONEncoder):
def default(self,o):
if isinstance(o,datetime):
return o.strftime('%Y%m%d%H%M%S')
return super().default(o)
print(dumps(ret,indent=4,cls=DateTimeEncoder))
# 第二种:
import json
import datetime
d = {
'name' : 'Foo'
}
print(json.dumps(d)) # {"name": "Foo"}
d['date'] = datetime.datetime.now()
def myconverter(o):
if isinstance(o, datetime.datetime):
return o.__str__()
print(json.dumps(d, default = myconverter)) # {"date": "2016-04-08 11:43:36.309721", "name": "Foo"}