在我的 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)