Python 在GAE/gviz_api上的JSON中浮动
我有一个运行在谷歌应用引擎上的python应用程序,它以JSON格式输出数据,该格式由用于谷歌图表可视化的gviz_api构建。代码如下:Python 在GAE/gviz_api上的JSON中浮动,python,json,google-app-engine,Python,Json,Google App Engine,我有一个运行在谷歌应用引擎上的python应用程序,它以JSON格式输出数据,该格式由用于谷歌图表可视化的gviz_api构建。代码如下: class StatsItem(ndb.Model): added = ndb.DateTimeProperty(auto_now_add = True, verbose_name = "Upload date") originated = ndb.DateTimeProperty(verbose_name = "Originati
class StatsItem(ndb.Model):
added = ndb.DateTimeProperty(auto_now_add = True, verbose_name = "Upload date")
originated = ndb.DateTimeProperty(verbose_name = "Origination date")
host = ndb.StringProperty(verbose_name = "Originating host")
uptime = ndb.IntegerProperty(indexed = False, verbose_name = "Uptime")
load1 = ndb.FloatProperty(indexed = False, verbose_name = "1-min load")
load5 = ndb.FloatProperty(indexed = False, verbose_name = "5-min load")
load15 = ndb.FloatProperty(indexed = False, verbose_name = "15-min load")
class ChartDataPage(webapp2.RequestHandler):
def get(self):
span = int(self.request.get('span', 720))
stats = StatsItem.query().order(-StatsItem.originated).fetch(span)
header = { 'originated' : ("datetime", "date") }
vars = []
for v in self.request.get_all('v'):
if v in StatsItem._properties.keys():
vars.append(v)
header[v] = ("number", StatsItem._properties[v]._verbose_name)
data = []
for s in stats:
entry = { 'originated' : s.originated }
for v in vars:
entry[v] = getattr(s, v)
data.append(entry)
data_table = gviz_api.DataTable(header)
data_table.LoadData(data)
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(data_table.ToJSonResponse(columns_order=(("originated",) + tuple(vars)),
order_by="originated"))
它工作正常,但我得到了浮点类型属性的著名问题,即这是我看到的输出(示例):
谷歌.可视化.查询.谷歌.谷歌.可视化.查询..谷歌.谷歌.谷歌.可视化.查询...政府.搜索.谷歌.谷歌.谷歌.谷歌.可视化.查询.查询....政府....回应回应.(.(.(.(.(“状态:::“状态:::“状态:::“状态”:“状态:”ok“状态”ok”,“ok”,“表”和表:::::,[表”行::{“行:{”行:{[[c“““3.3.0.3.3.3.3.3.3亿亿亿亿0.0.0.0.0.0.0.0.0.0.0.3.3.3.3.3亿亿亿亿亿..............0 0 0 0 0 0 0 0 0 0 0 0.....................................}]}{“c:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(2013,11,19,13,3,23518),“:0.4099999999998}],{“c”:[{“v”:“日期(2013,11,19,13,4,23643)”,{“v”:0.40999999999998}],“cols”:[{“类型”:“日期时间”,“id”:“起源”,“标签”:“日期”},{“类型”:“编号”,“id”:“装载5”,“标签”:“5分钟装载”}],“需求id”:“0”,“版本”:“0.6”})
因此,值为0.33(如数据存储查看器中所示)的浮点在JSON中表示为0.3300000000000002。虽然它可以工作,但它不仅丑陋,而且占用带宽,所以我想把它四舍五入到2位数,即0.33。奇怪的是,在某些情况下,这种情况正在发生(见上面的0.25)
我正在从我的应用程序目录加载gviz_api模块
我尝试过以下解决方案,但均无效: