2

我有一个包含 DecimalField 的 Django 模型。生成的 json 应该只包含数据(没有键),所以我使用 values_list() 将查询集转换为元组列表:

    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]]

在我看来,这应该是一项简单的任务,但找不到一种简单的方法来完成它,而无需手动解析和处理所有内容......

有什么建议么?

非常感谢

艾蒂安

4

1 回答 1

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], ...'
于 2013-11-04T21:41:47.583 回答