由于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 以便迭代
看法?
您可以将可迭代编码为列表:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)