HOWTO · Python
在 Flask 中返回一個有效的 JSON 響應
我們將通過此解釋瞭解 Flask 中的 JSON 支援,我們還將學習如何建立 api 以及如何在 Flask 中的 jsonify() 的幫助下將其返回到 JSON 響應中。
通過這個解釋,我們將瞭解 Flask 中的 JSON 支援以及如何在 Flask 中的 jsonify() 的幫助下建立 API 並在 JSON 響應中返回它。
藉助 Flask 中的 jsonify() 返回有效的 JSON 響應
在 Flask 中使用 JSON 非常簡單,因為 JSON 物件的型別可以對映到 Python 型別,我們可以像訪問字典或陣列一樣訪問它。如果你熟悉 JSON 的基礎知識,那麼你應該能夠理解這一點。
現在我們需要設定一個 Flask 應用程式。我們只是做一些基本的事情來建立一個應用程式,然後我們將建立一個單一的路線。
我們將為 Get_Trucks() 方法指定一個根,即裝飾器內的 route('truck/api/',methods=['GET'])。在 Get_Trucks() 方法中,我們將宣告一個名為 Trucks 的字典列表並直接返回它。
@app.route("truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
現在,我們來看兩種情況:第一種是返回一個物件陣列,第二種是隻返回一個物件本身或一個字典。
讓我們繼續看看第二個。除了名為 Truck_Details() 的函式外,程式碼將相同。
from flask import Flask
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return Trucks
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)
現在,我們將執行 Flask 應用程式並轉到瀏覽器。讓我們測試一下這第一條路線。
當我們按下 Enter 時,我們會收到型別錯誤,我們可以讀取 view 函式沒有返回有效響應,因為我們正在嘗試向瀏覽器傳送 Python 列表。
我們可以通過從 Flask 中再匯入一個東西來快速解決這個問題:jsonify()。這是一個內建 Flask;我們不需要使用第三方模組。
我們將轉到返回列表或陣列的位置,並將其包裝在 jsonify() 中。讓我們儲存它並再次測試我們的路由,現在我們得到了一個有效的 JSON 響應。
如果我們在網路檢查器中檢視這個,我們可以看到這個應用程式的內容型別是 JSON。
讓我們看看不使用 jsonify() 從 Flask 返回單個物件。讓我們在瀏覽器中檢視它。
它之所以有效,是因為我們使用的是升級版本。如果你使用 Flask 版本 1.1.0 或更高版本,當它在檢視中返回字典時,它會自動將字典轉換為 JSON,但如果你的 Flask 版本小於 1.1.0,那麼你可以執行與我們返回多個物件所做的相同。
如果我們看右邊,我們可以看到內容型別是 JSON,我們只是使用一個名為 JSON 檢視的 Chrome 擴充套件來美化響應資料。
完整原始碼:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/truck/api/", methods=["GET"])
def Get_Trucks():
Trucks = [
{"id": 1, "year": 2017, "model": ""},
{"id": 2, "year": 2019, "model": ""},
{"id": 3, "year": 2020, "model": ""},
{"id": 4, "year": 2016, "model": ""},
]
return jsonify(Trucks)
@app.route("/truck-details/api/", methods=["GET"])
def Truck_Details():
Details = {"id": 2, "year": 2019, "model": ""}
return Details
if __name__ == "__main__":
app.run(debug=True)