十进制转JSON
我从数据库中提取了一个小数值的总和。
我想在一个JSON结果中使用这个值。
json.dumps( { 'sum': amount } ) #where amount is my Decimal
Django无法直接把Decimal
类型转换成JSON格式。
我可以把它转换成字符串,但我希望在JSON中保留数字类型。
如果我尝试把它转换成float
类型,结果就会出现超过两位小数的情况。
如果可能的话,应该怎么做才能得到下面这样的结果呢?
{ 'sum': 500.50 }
4 个回答
0
十进制数可以转换成浮点数,JavaScript会知道怎么处理这个浮点数。
json.dumps( { 'sum': float(amount) } )
0
来自这个链接:http://code.google.com/p/simplejson/issues/detail?id=34。
我可以告诉你三种解决方案:
使用cjson,它可以很好地处理小数值。
使用猴子补丁,像这个链接中的例子那样:http://code.google.com/p/simplejson/issues/detail?id=61
使用jsonutil,查看最后的评论:http://code.google.com/p/simplejson/issues/detail?id=34#c28
你可以在第一个链接中找到更多详细信息。
12
你可以扩展 JSONDecoder 类,来为 Decimal 类型提供一个自定义的序列化器,类似于这个文档中的例子:http://docs.python.org/py3k/library/json.html
>>> import json
>>> class DecimalEncoder(json.JSONEncoder):
... def default(self, obj):
... if isinstance(obj, Decimal):
... return "%.2f" % obj
... return json.JSONEncoder.default(self, obj)
...
这只是一个不完整的例子,希望能给你一个好的起点。