python使用属性将自定义对象转换为json

时间:2014-05-23 17:33:08

标签: python bottle

在Bottle框架或python中,有没有办法使用对象的属性将自定义对象转换为json? 我看到很少有帖子建议在自定义类上编写to_json(self)种类的方法。想知道是否有任何自动化的方法吗?

来自Java世界,希望Jackson类型的模块具有XmlRootElement注释(或python术语中的装饰器)。但到目前为止没有找到任何东西。

更新我不想使用__dict__元素。而是想使用我的自定义类的属性来构建json。

1 个答案:

答案 0 :(得分:3)

您可以使用装饰器“标记”需要表示的属性。 你仍然需要编写一个to_json函数,但是你只需要在基类中定义一次

这是一个简单的例子:

import json
import inspect

def viewable(fnc):
        '''
            Decorator, mark a function as viewable and gather some metadata in the process

        '''
        def call(*pargs, **kwargs):
                return fnc(*pargs, **kwargs)
        # Mark the function as viewable
        call.is_viewable = True
        return call

class BaseJsonable(object):

    def to_json(self):
        result = {}
        for name, member in inspect.getmembers(self):
            if getattr(member, 'is_viewable', False):
                value = member()
                result[name] = getattr(value, 'to_json', value.__str__)()
        return json.dumps(result)

class Person(BaseJsonable):

    @viewable
    def name(self):
        return self._name


    @viewable
    def surname(self):
        return self._surname

    def __init__(self, name, surname):
        self._name = name
        self._surname = surname


p = Person('hello', 'world')
print p.to_json()

打印

{"surname": "world", "name": "hello"}