如何将参数传递给 Python 中的自定义 JSONEncoder default() 函数



在我的 Flask 应用程序中,我使用自定义JSONEncoder来序列化舍入到两位的decimal.Decimal对象。

class MyJsonEncoder(JSONEncoder):
def default(self, obj, prec=2):
if isinstance(obj, Decimal):
return str(obj.quantize(Decimal('.'+'0'*(prec-1)+'2')))
else:
return JSONEncoder.default(self, obj)

prec参数允许我更改舍入的精度。它默认为两个位置。我想偶尔调用json.dumps并向其传递一个prec参数,以便我可以强制decimal.Decimal对象舍入到 4 位。

json_string = json.dumps(some_data, prec=4)

但是当我这样做时,JSON 模块会抛出:

TypeError: __init__() got an unexpected keyword argument 'prec'

可以做我在这里尝试的事情吗?我不明白为什么 JSON 模块对**kwargs做任何事情.我可以强制它忽略它们吗?

class MyJsonEncoder(JSONEncoder):
def __init__(self, prec=2, **kwargs):
super(MyJsonEncoder, self).__init__(**kwargs)
self.prec = prec
def default(self, obj):
prec = self.prec
...
MyJsonEncoder(prec=4).encode(some_data)

最新更新