Flask中jsonify返回Decimal为字符串而非浮点数,有无内置解决方法?
Flask中自动将Decimal转为浮点数返回的内置方案
Flask 默认的 JSON 编码器不会自动处理 Decimal 类型,所以 jsonify 会把它转为字符串。你可以通过自定义 JSON 编码器的方式实现自动转换,无需每次手动处理:
- 继承 Flask 内置的
JSONEncoder,重写default方法来处理 Decimal 类型 - 将自定义编码器注册到 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
相关产品推荐
相关产品推荐

