在 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