如何在Python Flask中实现定制的json格式化程序来舍入浮点数?

时间:2015-08-20 12:16:51

标签: 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
  ]
}

1 个答案:

答案 0 :(得分:2)

如果这只是围绕浮动,你可以检查这个答案:how to round off a floating number in python

用于编写自定义JSON编码器的代码片段:Custom Flask JSONEncoder

烧瓶源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}