1、 TypeError: Object of type 'datetime' is not JSON serializable
再将python数据转成json字符串的时候,如果遇到了datetime类型的数据,就会报错,如下面的代码
import json
import datetime
data = {
'name': 'python',
'time': datetime.datetime.now()
}
data_str = json.dumps(data)
print(data_str)
之所以会报错,是因为,python的json模块根本没有定义如何转换datetime类型的数据,下表是json模块可以转换的数据类型
JSON
Python
object
dict
array
list
string
unicode
number (int)
int, long
number (real)
float
true
True
false
False
null
None
除了这些数据,json模块都不能正常转换
2、 JSONEncoder
数据转换,是由 JSONEncoder 这个类完成的,这个类有一个default方法,允许你重载,去处理那些特殊类型的数据,比如datetime
import json
import datetime
data = {
'name': 'python',
'time': datetime.datetime.now(),
'test': None
}
class MyJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
return json.JSONEncoder.default(obj)
data_str = json.dumps(data, cls=MyJsonEncoder)
print(data_str)
程序的输出结果为
{"name": "python", "time": "2019-04-10 09:53:45", "test": null}