我有一个包含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。当然,我可以将值转换为字符串-但我猜这不是一个好的解决方案。
任何帮助都非常感谢。
发布于 2012-11-07 03:19:02
Django已经包含了一个可以处理小数的编码器,以及datetimes:django.core.serializers.json.DjangoJSONEncoder。只需将其作为cls参数传递即可:
data = simplejson.dumps(ql, cls=DjangoJSONEncoder)发布于 2012-11-07 02:42:11
这是我在这个问题上找到的答案:Python JSON serialize a Decimal object
对json.JSONEncoder进行子类化怎么样?
类DecimalEncoder(simplejson.JSONEncoder):def _iterencode(self,o,markers=None):如果isinstance(o,decimal.Decimal):#想要在下一行中有一个简单的输出字符串(O),#但这意味着在使用super(...),#这一行上有一个输出(...),这将不起作用(参见下面的注释),所以...._iterencode(字符串( o)表示o in o) return super(DecimalEncoder,self)._iterencode(o,markers)
在您的例子中,您可以这样使用它:
data = simplejson.dumps(ql, cls=DecimalEncoder)https://stackoverflow.com/questions/13256909
复制相似问题