TypeError: Object of type 'datetime' is not JSON serializable
TypeError: Object of type 'datetime64' is not JSON serializable
TypeError: Object of type int64 is not JSON serializable
在使用json.dumps(obj)
的时候,可能会报错如上,主要原因是:
obj 里的
int64
、datetime64
、datetime
等这些数据类型是numpy里的数据类型(pandas里用的就是numpy),需要转为python的数据类型才可以进行json.dumps()
。
参考网上的一些解决方案,但都没有解决标题上的报的这个错误,TypeError: Object of type 'datetime64' is not JSON serializable
,可能这个坑被我先踩到了,那就先来填上吧。解决方案如下:
import json
from datetime import date, datetime
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
elif isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
elif isinstance(obj, np.datetime64): # 这里解决题目上报错
return str(obj)[:10]
else:
return super(NpEncoder, self).default(obj)
json.dumps(obj, cls=NpEncoder) # 调用
目前遇到的数据类型都在这里了,如果还有其他的,再添加分支就可以了。