2014-01-07 45 views
1

由於Python3中對dict.values()和keys()的更改,我遇到了一些麻煩。專門用python編寫JSON對象3

我的舊代碼是這樣的:Python的

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)) 

這3.3+引發異常:

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

簡單的解決方法是做list(a.values()),對我的問題是,我在代碼中有很多像這樣的實例。有沒有辦法擴展ComplexEncoder以迭代 視圖?

回答

2

你可以編碼迭代的列表:

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)