2017-09-01 14 views
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) 
+1

JSONEncoderでクラスを拡張しないで、JSONEncoderを拡張してクラスを処理します。 – glibdud

+0

あなたがシリアライズ可能にしたいクラスは、*あなたが基本的な誤解である「JSONEncoder」から継承していないと思われます。 –

答えて

0

あなたはこのような何かを行う必要があります。
ご覧くださいjson doc

関連する問題