json.dumps() 对datetime.datetime, datetime.date类型数据无法识别会报错, 需要自定义encoder 来解决
在学习flask的源码中,了解了偏函数 ,可以创建原函数的代理,支持预设参数,还可保留原来该用方式
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from functools import partial
class DateEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(obj, datetime.date): return obj.strftime("%Y-%m-%d") else: return json.JSONEncoder.default(self, obj)
json_dump=partial(json.dumps, ensure_ascii=False, cls=DateEncoder)
|
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import copy
class User(object):
def __init__(self, id, sname): self.id=id self.sname=sname self.time=datetime.datetime.now() self.sname_zh='汉字'
def __repr__(self): self_dict = copy.deepcopy(self.__dict__) return json_dump(self_dict, indent=2 )
print User(1, 'admin')
>>> { "time": "2019-08-13 14:04:21", "sname": "admin", "id": 1, "sname_zh": "汉字" }
|