在Bottle框架或python中,有没有办法使用对象的属性将自定义对象转换为json?
我看到很少有帖子建议在自定义类上编写to_json(self)
种类的方法。想知道是否有任何自动化的方法吗?
来自Java世界,希望Jackson
类型的模块具有XmlRootElement
注释(或python术语中的装饰器)。但到目前为止没有找到任何东西。
更新我不想使用__dict__
元素。而是想使用我的自定义类的属性来构建json。
答案 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"}