Правильный ответ
Чтобы сделать сериализуемую 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
также будет сериализовано, без каких-либо дальнейших действий с вашей стороны.
Golf'd Version
Если все, что вы хотите сделать, это 1-1 сопоставить имена переменных экземпляра с их соответствующими значениями, вы можете использовать некоторую встроенную магию Python. Всякий раз, когда вы хотите сериализовать более сложный объект (опять же, только с использованием карты переменных-значений 1-1), просто вызовите эту строку:
simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)
Для данного экземпляра MyObject
он будет вести себя так же, как и вышеупомянутый serialize
метод.