【发布时间】:2014-01-07 06:21:51
【问题描述】:
我的课程如下所示:
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})
但这对我来说真的很难看。实现目标的首选方式是什么?
【问题讨论】:
-
其实我更喜欢你认为“丑陋”的方式。如果您经常这样做,那么也许将字典的创建变成一个函数,该函数接受对象和代表您想要包含(或可能排除)的属性的字符串列表并创建字典(使用
dir()和 @987654329 @)。 -
是的,这个问题很烦人,所以我决定patch Flask to make it work。