python - 如何在Python Flask中实现自定义json格式化程序来舍入 float ?

标签 python json flask

是否可以通过一种简单的方式使 jsonify 格式浮点到小数点后一位?

这是一个简单的例子。如何添加自定义 json 编码器:

from flask import Flask, jsonify
from flask.ext.restful import Api, Resource

app = Flask(__name__)
api = Api(app)

class Test(Resource):
    def get(self):
        return jsonify({'data': [.444, .456]});

api.add_resource(Test, '/')

if __name__ == '__main__':
    app.run()

因此输出将是:

{
  "data": [
    0.4, 
    0.5
  ]
}

最佳答案

如果这只是关于舍入 float ,您可以检查这个答案:how to round off a floating number in python

为了编写自定义 JSON 编码器,此代码片段:Custom Flask JSONEncoder

Flask 源 JSON 库 here

编辑: 这里的问题仍然是您想对什么类型的数据执行什么操作,以及何时执行此操作。在某些情况下,您可能根本不想对其应用任何更改。您可以选择首先检查类型,然后确定在将数据传递给编码器之前如何处理数据,或者将所有逻辑放入自定义编码器类本身。

小例子:

import json
import math

from flask.json import dumps, JSONEncoder


def round_float(data):
    if type(data) is float:
        rounded = math.ceil(data*100)/100
        return rounded
    else:
        raise TypeError('data must be a float not %s' %type(data))


class CustomJSONEncoder(JSONEncoder):
    def default(self, o):
        #alternatively do the type checking in the default method
        if type(o) is float:
            return round_float(o)
        if type(o) is int:
            return float(o)

encoder = CustomJSONEncoder()

data = dict(floated=encoder.default(2))
data2 = dict(rounded=encoder.default(0.896))

dumps(data)
dumps(data2)

将输出:

{"floated": 2.0}
{"rounded": 0.9}

关于python - 如何在Python Flask中实现自定义json格式化程序来舍入 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32118051/

相关文章:

javascript - 连接两个动态创建的选择元素

python - 如何在python pyqt5中制作透明的十字符号

python - Python 列表中的空值

python - 将变量从 python 传递到 mySQL 数据库

php - 如何通过 Slim php 和 Paris 将 Backbone 模型数据发布到数据库

python - 为什么我的 Flask 应用程序会给出此响应 "class User(db.model): AttributeError: ' SQLAlchemy' 对象没有属性 'model' “?

python - 如何摆脱python中的ascii编码错误

mysql - 如何将 JSON 数据添加或合并到现有 MySQL 行的 JSON 字段中?

android - 解析没有键的 JSON 数组

python - 从 Flask 下载后删除上传的文件