2014-01-07 1 views
1

파이썬 3에서 dict.values ​​() 및 keys()가 변경되어 일부 문제가 발생합니다. 예외 인상 3.3 이상파이썬 3 JSON 객체 인코딩 특수화

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

이 파이썬 :

내 예전의 코드는 다음과 같이이었다

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

쉬운 해결 방법은 list(a.values())을하는 것입니다, 나를 위해 문제를 그 I 코드에서 그와 같은 인스턴스가 많이 있습니다. 보기를 반복하기 위해 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)