在 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