我的课程如下:
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
对象显式创建一个dict来做到这一点:
return jsonify({"name": s.name, "length": s.length})
但这对我来说似乎很难看。实现目标的首选方式是什么?
答案 0 :(得分:3)
您可以尝试这项工作:
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__)
答案 1 :(得分:2)
你可以通过几种不同的方式做到这一点。确保您只返回所需内容的最安全方法是这样做:
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"
}