【问题标题】:Specializing JSON object encoding with python 3使用 python 3 专门化 JSON 对象编码
【发布时间】:2017-12-17 06:13:56
【问题描述】:

由于 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 以迭代 查看?

【问题讨论】:

    标签: json python-3.x


    【解决方案1】:

    您可以将可迭代对象编码为列表:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      相关资源
      最近更新 更多