[英]Flask jsonify: object is not iterable
我的課程如下:
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})
但這對我來說真的很難看。 實現目標的首選方式是什么?
您可以嘗試這項工作:
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__)
你可以通過幾種不同的方式做到這一點。 確保您只返回所需內容的最安全方法是這樣做:
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"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.