簡體   English   中英

Flask jsonify返回奇怪的數組?

[英]Flask jsonify returns weird array?

我正在嘗試使用Flask創建一個簡單的API。 我現在想要返回一個dicts列表如下:

print results  # prints out [{'date': '2014-09-25 19:00:00', 'title': u'Some Title'}]
response = make_response(jsonify(results))
response.headers['Content-Type'] = 'application/json'
return response

但是當我在瀏覽器中訪問網址時,我得到以下信息:

{
  "date": "title"
}

有誰知道我在這里做錯了什么? 歡迎所有提示!

對於0.11之前的 Flask版本這只是一個問題; 如果你仍然看到這個問題,最好的辦法是升級到更高版本 ,因為0.10現在已經非常古老了。


對於最高版本0.10的Flask, jsonify()只接受字典 如果你給它一個列表,它會把對象變成一個字典,用dict(argument) 請參閱Flask.jsonify()文檔

使用application/json mimetype創建具有給定參數的JSON表示的Response 此函數的參數與dict構造函數的參數相同。

(強調我的)

在您的情況下,您有一個包含一個元素的列表,並且該元素在迭代時具有2個值。 這兩個值然后成為輸出字典的鍵和值:

>>> results = [{'date': '2014-09-25 19:00:00', 'title': u'Some Title'}]
>>> dict(results)
{'date': 'title'}

那是因為dict()構造函數要么使用另一個字典,關鍵字參數, 要么使用(key, value)對的迭代。

解決方案是不傳入列表,但至少給它一個鍵:

response = jsonify(results=results)

jsonify()已經返回一個響應對象,不需要在其上調用make_response() 上面會生成一個帶有'results'鍵的JSON對象,並將您的列表作為值。

出於安全原因, jsonify()只接受字典。 再次引用文檔:

出於安全原因,僅支持對象。 有關此內容的更多信息,請查看JSON安全性

如果你真的想繞過這個,你必須創建自己的回復:

from Flask import json

response = make_response(json.dumps(results), mimetype='application/json')

現在,Flask的jsonify()方法序列化頂級數組(截至此提交時 ),這應該不再是問題。

你需要在Flask上> = 0.11。

為方便起見,您可以傳入Python列表: jsonify([1,2,3])或傳入一系列argsjsonify(1,2,3)

兩者都將轉換為: [1,2,3]

詳情請訪問: http//flask.pocoo.org/docs/dev/api/#flask.json.jsonify

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM