在 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