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

时间:2018-04-27 22:10:38

标签: python json flask

在我的Flask应用程序中,我使用自定义JSONEncoderdecimal.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做任何事情。我可以强迫它忽略它们吗?

1 个答案:

答案 0 :(得分:1)

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)