コレクションに重複が含まれないようにするために、メソッドとsetオブジェクトを含むPython があります。__hash____eq__
この結果をjsonでエンコードする必要がありsetますsetが、json.dumpsメソッドにempty を渡すと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の真の精神では、子オブジェクトが何を含んでいるかを正確に伝えることはできません。
1つのオブジェクトにはの日付値が含まれる場合がありますが、starts別のオブジェクトには、「非プリミティブ」オブジェクトを含むキーを含まない他のスキーマが含まれる場合があります。
そのため、考えられる唯一の解決策はJSONEncoder、defaultメソッドを置き換えてさまざまなケースをオンにするように拡張することでした。しかし、これに対処する方法がわからず、ドキュメントがあいまいです。ネストされたオブジェクトでは、defaultキーから返される値はキーによるものですか、それともオブジェクト全体を参照する一般的なinclude / discardですか?そのメソッドはネストされた値にどのように対応しますか?私は以前の質問を調べましたが、ケース固有のエンコーディングへの最良のアプローチを見つけることができないようです(残念ながら、ここで行う必要があるように思われます)。
dictですか?私はあなたlistがセットからちょうどそれを作り、それをエンコーダーに渡したいと思うと思います...例:encode(list(myset))