TypeError: Object of type 'datetime64' is not JSON serializable

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 里的 int64datetime64datetime等这些数据类型是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)  # 调用

目前遇到的数据类型都在这里了,如果还有其他的,再添加分支就可以了。

你可能感兴趣的:(TypeError: Object of type 'datetime64' is not JSON serializable)