包含JSON的小数的Python dict

时间:2012-02-14 12:45:44

标签: python json

  

可能重复:
  Python JSON serialize a Decimal object

任务:将包含混合数据类型(整数/ strint / decimal / ...)的dict转换为值,转换为JSON数组。

我知道如何将python dict转换为JSON:

D = {key1:val1, key2,val2}
import json
jD = json.dumps(D)

我也知道十进制值必须转换为字符串,否则python会抛出'decimal不是json serializable'的错误。

所以我需要遍历dict以查找数据类型。

for key in D.keys():
    if type(key) == '<class "decimal.Decimal">': ## this is erroneous. pl. suggest correction
    D[key] = str(D[key])

但是这种编程涉及手工编码和硬编码。

如果我得到嵌套字典结构,则需要再次进行硬编码(这是错误的)。

是否还有其他方法/技巧可以从dict中的任何数据类型中获取JSON数组?

2 个答案:

答案 0 :(得分:4)

请注意,JSON不能表示小数,只能表示浮点数和字符串。因此,您应该将小数转换为字符串,如下所示:

keys_for_json = {str(k):v for k,v in keys.items()}

答案 1 :(得分:3)

为什么不将JSONEncoder子类化?这很简单干净:

class DecimalEncoder(json.JSONEncoder):
    def _iterencode(self, o, markers=None):

        if isinstance(o, decimal.Decimal):  # isinstance() is better than type(), because it handles inheritance
            return (str(o) for o in [o])

        return super(DecimalEncoder, self)._iterencode(o, markers)