【问题标题】:Flask TypeError: Object of type Decimal is not JSON serializableFlask TypeError:Decimal 类型的对象不是 JSON 可序列化的
【发布时间】:2023-12-26 22:22:01
【问题描述】:

我们正在使用烧瓶作为我们的应用程序服务。在内部,我们使用 Jsonify 来返回响应,我们的响应包含十进制数据。

这里要提到几件事。

  1. 我们使用的是Windows机器

  2. 我的一些同事对具有相同配置的数据没有任何问题。 我们观察到的一件事是,如果安装,flask 默认使用 simplejson。如果没有,那么它将 回退到 json 包。

示例数据:jsonify({'response':Decimal('12345.00000')})

我们的问题是为什么有些人默认使用 simplejson 烧瓶,而其他人则无法识别 simplejson(即使已安装)并且仅使用 json 会抛出十进制 json 错误。

知道根本原因是什么以及需要做哪些改变,让flask知道使用simplejson而不是json?

我们暂时在烧瓶包中进行了以下手动更改。

【问题讨论】:

    标签: json flask decimal serializable


    【解决方案1】:

    你有没有机会使用不同版本的烧瓶?

    https://github.com/pallets/flask/issues/3555

    在第 2 版中,不再支持 simplejson,但如 cmets 中所述,您可以使其对 JSONEncoder 使用 simplejson:

    from simplejson import JSONEncoder
    
    app.json_encoder = JSONEncoder
    

    看起来好像已经修复了小数问题,但尚未发布,并将在版本 2.0.2 中发布

    【讨论】:

      【解决方案2】:

      你不能用jsonify({'response': Decimal('12345.00000')})代替jsonify({'response': float('12345.00000')})吗?

      【讨论】:

      • 嗨莫里茨...是的!这是个好主意,我们也尝试过。应用需要更高的精度。此外,我们希望在不更改代码的情况下进行修复。当它通过使用 simplejson 在一个系统中工作时,为什么不在其他系统中工作?我们缺少什么。
      最近更新 更多