主要是两个知识点,json.dumps函数,functools.partial
json.dumps的default参数:
源码中对于该函数的介绍如下
default(obj)
is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.
functools.partial:
用于创建一个偏函数,它用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待,这样可以简化函数调用.
简单实例:
from functools import partial
def add(x, y):
return x + y
add_y = partial(add, 3) # add_y 是一个新的函数
add_y(4)
根据上述两个知识点,我们来实现自己的json_dumps序列化函数。
import json
def json_serial_fallback(obj):
"""JSON serializer for objects not serializable by default json code"""
if isinstance(obj, (datetime.datetime, datetime.date)):
return str(obj)
if isinstance(obj, bytes):
return obj.decode("utf-8")
raise TypeError ("%s is not JSON serializable" % obj)
json_dumps = partial(json.dumps, default=json_serial_fallback)