我有一个包含Decimal对象的查询集。我想将这些数据传递给json转储行:
ql = Product.objects.values_list('length', 'width').get(id=product_id)
data = simplejson.dumps(ql)
TypeError: Decimal('62.20') is not JSON serializable
我应该如何将这些值传递给json。当然我可以将值转换为字符串 - 但我猜这不是一个好的解决方案。
任何帮助都非常感激。
答案 0 :(得分:22)
Django已经包含了一个可以处理小数的编码器,以及日期时间:django.core.serializers.json.DjangoJSONEncoder
。只需将其作为cls
参数传递:
data = simplejson.dumps(ql, cls=DjangoJSONEncoder)
答案 1 :(得分:1)
以下是我在这个问题上找到的答案:Python JSON serialize a Decimal object
如何对json.JSONEncoder进行子类化?
class DecimalEncoder(simplejson.JSONEncoder): def _iterencode(self, o, markers=None): if isinstance(o, decimal.Decimal): # wanted a simple yield str(o) in the next line, # but that would mean a yield on the line with super(...), # which wouldn't work (see my comment below), so... return (str(o) for o in [o]) return super(DecimalEncoder, self)._iterencode(o, markers)
在你的情况下,你会像这样使用它:
data = simplejson.dumps(ql, cls=DecimalEncoder)