0
クラスJSONをシリアル化可能にしたい場合、JSONEncoder
クラスでJSONを拡張しようとしています。しかし、なぜdefault
関数はo
パラメータを自分のクラスのメソッドとみなしているのですか?Python JSONエンコーダ - デフォルトメソッド
メソッドに渡される3番目のオブジェクトではなく、クラスオブジェクトをシリアル化したいですか?
このメソッドをサブクラスで実装して、oの直列化可能オブジェクトを返すか、ベース実装を呼び出して(TypeErrorを発生させます)。最後のリターンで
>>> import json
>>> class ComplexEncoder(json.JSONEncoder):
... def default(self, obj):
... if isinstance(obj, complex):
... return [obj.real, obj.imag]
... # Let the base class default method raise the TypeError
... return json.JSONEncoder.default(self, obj)
多分あなたは忘れているJSON:
def default(self, o):
try:
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
# Let the base class default method raise the TypeError
return JSONEncoder.default(self, o)
JSONEncoderでクラスを拡張しないで、JSONEncoderを拡張してクラスを処理します。 – glibdud
あなたがシリアライズ可能にしたいクラスは、*あなたが基本的な誤解である「JSONEncoder」から継承していないと思われます。 –