【问题标题】:How to pass parameters to a custom JSONEncoder default() function in Python如何将参数传递给 Python 中的自定义 JSONEncoder default() 函数
【发布时间】:2018-04-27 22:10:38
【问题描述】:

在我的 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 做任何事情。我可以强制它忽略它们吗?

【问题讨论】:

    标签: python json flask


    【解决方案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)
    

    【讨论】:

    • 感谢您编辑您的回复。您最初的回复使我朝着正确的方向前进,最终我写了与您上面所写的完全一样的东西。像魅力一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2015-06-08
    • 2016-06-30
    • 1970-01-01
    • 2022-11-10
    • 2021-08-18
    相关资源
    最近更新 更多