使用python 3专门编写JSON对象编码

时间:2014-01-07 15:17:10

标签: json python-3.x

由于Python3中对dict.values()和keys()的更改,我遇到了一些麻烦。

我的旧代码是这样的:

import json
class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, complex):
            return [obj.real, obj.imag]
        return json.JSONEncoder.default(self, obj)

a = { '1' : 2 + 1j, '2' : 4 + 2j }

print(json.dumps(a.values(), cls=ComplexEncoder))

这在Python 3.3+上引发异常:

TypeError: dict_values([(2+1j), (4+2j)]) is not JSON serializable

简单的解决方法是list(a.values()),问题在于我在代码中有很多这样的实例。有没有办法扩展ComplexEncoder以迭代 查看?

1 个答案:

答案 0 :(得分:2)

您可以将iterable编码为列表:

class IterEncoder(json.JSONEncoder):
    def default(self, obj):
        try:
            return list(obj)
        except TypeError:
            return super().default(obj)

class ComplexEncoder(IterEncoder):
    def default(self, obj):
        if isinstance(obj, complex):
            return [obj.real, obj.imag]

        return super().default(obj)