You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中jsonify返回Decimal为字符串而非浮点数,有无内置解决方法?

Flask中自动将Decimal转为浮点数返回的内置方案

Flask 默认的 JSON 编码器不会自动处理 Decimal 类型,所以 jsonify 会把它转为字符串。你可以通过自定义 JSON 编码器的方式实现自动转换,无需每次手动处理:

  1. 继承 Flask 内置的 JSONEncoder,重写 default 方法来处理 Decimal 类型
  2. 将自定义编码器注册到 Flask 应用中

具体代码示例:

from flask import Flask, jsonify
from decimal import Decimal
from flask.json import JSONEncoder

class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        # 遇到Decimal类型时转为浮点数
        if isinstance(obj, Decimal):
            return float(obj)
        # 其他类型交给父类处理
        return super().default(obj)

# 初始化应用并绑定自定义编码器
app = Flask(__name__)
app.json_encoder = CustomJSONEncoder

# 测试路由
@app.route('/demo')
def demo_route():
    data = {
        "price": Decimal("99.99"),
        "count": Decimal("5"),
        "normal_field": "hello"
    }
    return jsonify(data)

这样设置后,所有通过 jsonify 返回的响应里的 Decimal 值都会自动转为浮点数,不需要再手动遍历字典转换。

注意:将 Decimal 转为浮点数可能会存在精度丢失风险,如果你的业务需要严格保留精度,建议还是以字符串形式返回,但这不符合你要转浮点数的需求,所以按需选择即可。

内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:20:36