我有一个包含DecimalField的Django模型。生成的json应该只包含数据(没有键)所以我使用values_list()将queryset转换为元组列表:
MyModel.objects.filter(...).values_list('my_date_field','my_decimal_field').order_by('my_date_field')
然后,我需要将它序列化为json ...但json.dumps似乎无法处理Decimal字段...很多SO的答案都建议让你自己的编码器与json一起使用.dumps但这些自定义编码器不是递归的,似乎不适用于元组列表......
我需要的是以这种格式返回json:
[[1162512000000,78.29],
[1162771200000,79.71],
[1162857600000,80.51],
[1162944000000,82.45],
[1163030400000,83.34],
[1163116800000,83.12],
[1163376000000,84.35]]
在我看来,这应该是一项简单的任务,但无法找到一种简单的方法,而无需手动解析和处理所有内容......
有什么建议吗?
非常感谢
艾蒂安
答案 0 :(得分:1)
这应该有效:
import json
from decimal import Decimal as D
class DecimalJSONEncoder(json.JSONEncoder):
def default(self, o):
if type(o) == D:
# Here You can decide if You want decimal to be converted
# to string or float.
return float(o)
return super(DecimalJSONEncoder, self).default(o)
data = [[1162512000000, D(78.29)],
[1162771200000, D(79.71)],
[1162857600000, D(80.51)],
[1162944000000, D(82.45)],
[1163030400000, D(83.34)],
[1163116800000, D(83.12)],
[1163376000000, D(84.35)]]
encoder = DecimalJSONEncoder()
encoder.encode(data)
# Result:
# '[[1162512000000, 78.29], [1162771200000, 79.71], [1162857600000, 80.51], ...'