十进制到JSON

Jus*_*tin 9 python django

我从数据库中提取一个十进制值的总和.我正在尝试在JSON结果中使用该值

json.dumps( { 'sum': amount } ) #where amount is my Decimal
Run Code Online (Sandbox Code Playgroud)

Django无法序列化Decimal.我可以将它转换为字符串,但我想在JSON中使用数字类型.如果我尝试将其转换为float最终超过2位小数.

如果可能,需要发生什么才能获得如下结果?

{ 'sum': 500.50 }
Run Code Online (Sandbox Code Playgroud)

Jer*_*rub 11

你可以做的是扩展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)
...
Run Code Online (Sandbox Code Playgroud)

这是一个如何做到的非工作的例子,希望对你来说是一个很好的起点.

  • 实际上Django提供了一个内置的类--'django.core.serializers.json.DjangoJSONEncoder` - 您可以直接使用`simplejson.dumps(mydict,class = DjangoJSONEncoder)`.它还涉及日期时间. (10认同)
  • @Daniel谢谢.'class = DjangoJSONEncoder'需要'cls = DjangoJSONEncoder'.这确实有效,但它给了我一个字符串值:( (4认同)