在 Flask 中返回一個有效的 JSON 響應

Salman Mehmood 2022年7月18日
在 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 返回 JSON 輸出 1

我們可以通過從 Flask 中再匯入一個東西來快速解決這個問題:jsonify()。這是一個內建 Flask;我們不需要使用第三方模組。

我們將轉到返回列表或陣列的位置,並將其包裝在 jsonify() 中。讓我們儲存它並再次測試我們的路由,現在我們得到了一個有效的 JSON 響應。

如果我們在網路檢查器中檢視這個,我們可以看到這個應用程式的內容型別是 JSON。

Flask 返回 JSON 輸出 2

讓我們看看不使用 jsonify() 從 Flask 返回單個物件。讓我們在瀏覽器中檢視它。

它之所以有效,是因為我們使用的是升級版本。如果你使用 Flask 版本 1.1.0 或更高版本,當它在檢視中返回字典時,它會自動將字典轉換為 JSON,但如果你的 Flask 版本小於 1.1.0,那麼你可以執行與我們返回多個物件所做的相同。

如果我們看右邊,我們可以看到內容型別是 JSON,我們只是使用一個名為 JSON 檢視的 Chrome 擴充套件來美化響應資料。

Flask 返回 JSON 輸出 3

完整原始碼:

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)
Salman Mehmood avatar Salman Mehmood avatar

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