3

キーが文字列で、値が MyObject オブジェクトのリストである Python 辞書があります。私が実行すると

simplejson.dumps(dict)

「MyObject not JSON serializable」をスローします。

この例外を回避するにはどうすればよいですか? また、MyObject をシリアライズ可能にするにはどうすればよいですか?

4

1 に答える 1

8

適切な答え

シリアライズ可能にするMyObjectには、で参照できるメソッドを実装する必要がありますdumps。例えば:

class MyObject:
    #    ...
    #    MyObject has 3 properties: name (a string), number (an int), and parent (a MyObject)
    @staticmethod
    def serialize(obj):
        return {
            "name":   obj.name,
            "number": obj.number,
            "parent": obj.parent
        }

    #    ...

simplejson.dumps(myObjInstance, default=MyObject.serialize)

すばらしいのはdumps、他のすべてのJSONシリアル化可能オブジェクトと同様に、シリアル化メソッドを再帰的に呼び出すことです。つまり、obj.parentそれ以上のアクションなしで、同様にシリアル化されます。

ゴルフバージョン

インスタンス変数名をそれぞれの値に1-1マップするだけの場合は、組み込みのPythonマジックを使用できます。より複雑なオブジェクトをシリアル化する場合は常に(ここでも、1-1の可変値マップのみを使用して)、次の行を呼び出すだけです。

simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)

の特定のインスタンスでは、前述のメソッドMyObjectと同じように動作します。serialize

于 2012-01-25T18:03:49.073 に答える