我有一个如下所示的类:
class Sound(SoundJsonSerializer):
def __init__(self, name, length):
self.name = name
self.length = length其中SoundJsonSerializer使我的自定义JSONEncoder能够将此对象序列化为JSON:
{
"name": "foobar",
"length": 23.4
}现在,我希望我的一个请求能够准确地响应上面的JSON。
@app.route('/sounds/<soundid>')
def get_sound(soundid):
s = Sound("foobar", 23.4)
return jsonify(s)产生一个错误,声明s是不可迭代的,这是真的。如何让方法返回我想要的JSON?
我知道我可以通过显式地从我的Sound对象创建一个字典来做到这一点,如下所示:
return jsonify({"name": s.name, "length": s.length})但在我看来这真的很丑陋。实现我的目标的首选方法是什么?
发布于 2013-12-19 10:20:37
您可以尝试以下工作:
class Sound():
def __init__(self, name, length):
self.name = name
self.length = length
@app.route('/sounds/<soundid>')
def get_sound(soundid):
s = Sound('foobar', 23.4)
return jsonify(s.__dict__)发布于 2013-12-19 22:25:52
您可以通过几种不同的方法来完成此操作。确保你只返回你想要的东西的最安全的方法是这样做:
class Sound():
name = None
length = None
test = "Test"
def __init__(self, name, length):
self.name = name
self.length = length
@admin_app.route('/sounds/<sound_id>')
def get_sound(sound_id):
s = Sound('foobar', sound_id)
return jsonify(vars(s))通过将name = None,length = None定义为类级别变量的一部分,您可以使用vars()与__dict__
当您通过__init__实例化该类并在其中设置变量时,jsonify将只返回您通过__init__设置的内容。
以上代码的结果:
{
"length": "1",
"name": "foobar"
}https://stackoverflow.com/questions/20668883
复制相似问题