在 Flask 中返回一個有效的 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)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn