Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python 3专门化JSON对象编码_Json_Python 3.x - Fatal编程技术网

用python 3专门化JSON对象编码

用python 3专门化JSON对象编码,json,python-3.x,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

由于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
简单的解决方法是执行
列表(a.values())
,我的问题是代码中有很多这样的实例。有没有一种方法可以扩展ComplexEncoder来迭代
查看?

您可以将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)