나는 파이썬이 set
가진 개체를 포함 __hash__
하고 __eq__
특정없고 중복을하기 위해 방법이 컬렉션에 포함되어 있습니다.
이 결과를 json으로 인코딩해야 set
하지만 비어 set
있는 json.dumps
메소드를 메소드에 전달 하면 a가 발생합니다 TypeError
.
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([]) is not JSON serializable
json.JSONEncoder
맞춤 default
메소드 가있는 클래스에 대한 확장을 만들 수 있다는 것을 알고 있지만에서 변환을 시작할 위치조차 확실하지 않습니다 set
. set
기본 메소드 내의 값 으로 사전을 작성한 다음 인코딩을 리턴해야합니까? 이상적으로는 기본 인코더가 원래 인코더가 질식하는 모든 데이터 유형을 처리 할 수 있도록하고 싶습니다 (Mongo를 데이터 소스로 사용하므로 날짜 도이 오류를 발생시키는 것처럼 보입니다)
올바른 방향으로 힌트를 주시면 감사하겠습니다.
편집하다:
답변 해주셔서 감사합니다! 아마도 더 정확했을 것입니다.
나는 set
번역되는 것의 한계를 극복하기 위해 여기에 답을 활용하고 상향 조정 했지만 문제가되는 내부 키가 있습니다.
의 객체는로 set
번역되는 복잡한 객체 __dict__
이지만 json 인코더의 기본 유형에 적합하지 않은 속성 값을 포함 할 수도 있습니다.
이것에는 많은 다른 유형이 set
있으며 해시는 기본적으로 엔티티의 고유 ID를 계산하지만 NoSQL의 진정한 정신에는 자식 객체에 무엇이 포함되어 있는지 정확하게 알려주지는 않습니다.
한 객체는에 대한 날짜 값을 포함 starts
할 수있는 반면 다른 객체에는 "기본이 아닌"객체를 포함하는 키가없는 다른 스키마가있을 수 있습니다.
그렇기 때문에 내가 생각할 수있는 유일한 솔루션 은 다른 경우를 켜기 JSONEncoder
위해 default
방법을 대체 하기 위해 확장하는 것이 었습니다 . 중첩 된 객체에서 default
go by key 에서 반환 된 값 이 전체 객체를 보는 일반적인 포함 / 삭제입니까? 이 방법은 중첩 값을 어떻게 수용합니까? 이전 질문을 살펴본 결과 사례 별 인코딩에 대한 최선의 접근 방법을 찾지 못하는 것 같습니다 (불행히도 여기서해야 할 일처럼 보입니다).
dict
? 나는 당신이list
세트 에서 벗어나서 인코더로 전달 하고 싶다고 생각합니다 ... 예 :encode(list(myset))