如何使用__get__使对象JSON可序列化?

时间:2014-07-25 11:53:42

标签: python json string python-3.x descriptor

我有一个装饰器,它在__get__上返回一个字符串。如何使其与json.dumps兼容?

import json

class Decorator(object):
    def __init__(self, value=''):
        self.value = value
    def __set__(self, instance, value):
        self.value = value
    def __get__(self, instance, owner):
        return self.value

class Foo(object):
    decorator = Decorator()

foo = Foo('Hello World')
json.dumps(foo)

此最小示例在json.dumps中引发了一个异常,指出Decorator不可序列化。因为它不是一个真正的字符串,只是提供一个类似于接口的字符串,这并不奇怪。如何使用__get__

返回的值使JSON序列化

1 个答案:

答案 0 :(得分:2)

您需要扩展JSONEncoder类才能处理Foo个对象;几乎从documents粘贴的示例:

>>> class myEncoder(json.JSONEncoder):
...     def default(self, obj):
...         if isinstance(obj, Foo):
...             # implement your json encoder here
...             return 'foo object'
...         # Let the base class default method raise the TypeError
...         return json.JSONEncoder.default(self, obj)
... 
>>> json.dumps(foo, cls=myEncoder)
'"foo object"'