在 Flask 中處理 JSON 格式的請求資料

Salman Mehmood 2024年2月15日
在 Flask 中處理 JSON 格式的請求資料

通過這個解釋,我們將瞭解 JSON 是什麼以及如何處理 JSON 格式的傳入請求資料。我們還將學習如何使用 Postman Chrome 擴充套件來傳送 JSON 資料。

在 Flask 中處理 JSON 格式的請求資料

JSON 是一種用於結構化資料的緊湊、可讀的文字格式。JSON 代表 JavaScript 物件表示法;它是一種完全獨立於語言的文字格式。

它以大括號開頭和結尾。JSON 格式對於人類來說非常容易閱讀,對於計算機來說也很容易解析和生成。

還有另一種方法可以將請求資料解析到 Flask 應用程式,該方法將使用 JSON 物件。為了演示這一點,我們將使用 Postman,這是 Chrome 中的一個工具,允許你向特定 URL 傳送 HTTP 請求。

我們必須做的第一件事是建立一個處理 JSON 的路由。我們稱之為/post-data,它只接受 POST 請求,但這取決於你要使用什麼 HTTP 方法。

現在我們將定義一個名為 POST_REQ_DATA() 的方法。我們將返回一個 JSON 物件 jsonify(),並在其中放入一個字典。

@app.route("/post-data", methods=["POST"])
def POST_REQ_DATA():
    return jsonify({"Post_Request": "Sent"})

如果我們轉到 Postman 並切換到 POST 請求,輸入 /post-data 併傳送它,我們將看到我們通過 jsonify() 傳送的輸出。

Flask 請求 JSON 輸出 1

但目前,它不接受任何型別的請求資料。要訪問 JSON 請求,我們將返回 Flask 應用程式,在函式內部,我們將呼叫 request.get_json() 方法。

此方法將獲取傳入的 JSON 物件並將其轉換為 Python 資料結構。當我們將它傳遞給 jsonify() 時,它會在 JSON 物件上找到一個物件並將其轉換為 Python 字典,並將 JSON 物件中的陣列轉換為 Python 中的列表。

現在我們將使用 request.get_json() 宣告一個名為 P_R 的物件,然後我們將使用它作為鍵來定義一些值並將它們傳遞到 jsonify() 方法中。這些值應該只是常規變數。

def POST_REQ_DATA():
    P_R = request.get_json()
    company_name = P_R["company_name"]
    location = P_R["location"]
    userlist = P_R["userlist"]
    return jsonify(
        {
            "Post_Request": "Sent",
            "company_name": company_name,
            "location": location,
            "userlist": userlist[1],
        }
    )

我們將返回 Postman,單擊 Body 選項卡,然後切換到 Raw,然後確保在此下拉選單中選擇 JSON 應用程式,因為它是 Jason mime 型別。現在我們可以在這裡編寫 JSON 查詢,並在輸入 JSON 資料後點選傳送按鈕;響應如下所示。

Flask 請求 JSON 輸出 2

我們的 Flask 應用程式的完整原始碼如下所示:

from flask import Flask, jsonify, request

app = Flask(__name__)


@app.route("/post-data", methods=["POST"])
def POST_REQ_DATA():
    P_R = request.get_json()
    company_name = P_R["company_name"]
    location = P_R["location"]
    userlist = P_R["userlist"]
    return jsonify(
        {
            "Post_Request": "Sent",
            "company_name": company_name,
            "location": location,
            "userlist": userlist[1],
        }
    )


# We feed the follwing data inside the postman
# {'company_name':'Delftstack','location':'Netherland','userlist':['Harry Parker','Goerge Wilson']}

if __name__ == "__main__":
    app.run(debug=True)
作者: Salman Mehmood
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