您的位置:

Flask Jsonify详解

一、什么是Flask Jsonify

Flask是一个轻量级的Python Web框架,其设计目的是使得Web开发变得更加容易。Flask支持多种扩展库,Flask Jsonify是其中一个非常常用的扩展库。所谓的Jsonify,指的是将Python对象转换为Json对象。Flask Jsonify是Flask库中的一个函数,用来将Python数据结构转换为Json并返回到客户端。

二、Flask Jsonify的使用

Flask Jsonify的使用非常简单,我们只需要在Python代码中导入该扩展库,并且在需要返回Json结果的函数中使用该方法即可。下面是一个使用Flask Jsonify的示例代码:
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/user_info')
def user_info():
    user = {
        'name': '小明',
        'age': 18,
        'gender': '男'
    }
    return jsonify(user)

if __name__ == '__main__':
    app.run()
以上代码中,我们定义了一个/user_info的路由,当用户访问该路由时,会返回一个Json格式的用户信息。其中,我们使用了Flask Jsonify函数将Python字典对象转换为了Json对象。

三、Flask Jsonify函数的参数

Flask Jsonify函数支持多种参数类型,下面我们分别介绍一下这些参数。

1、字典类型的参数

字典类型的参数是使用最为广泛的一种情况,我们可以直接将一个Python字典对象传递给Flask Jsonify函数,该函数会将该字典对象转换为Json。
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/user_info')
def user_info():
    user = {
        'name': '小明',
        'age': 18,
        'gender': '男'
    }
    return jsonify(user)

if __name__ == '__main__':
    app.run()

2、列表类型的参数

列表类型的参数也可以被Flask Jsonify函数识别并转换为Json。我们可以将一个Python列表对象传递给Flask Jsonify函数,该函数会将该列表对象转换为Json。
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/user_list')
def user_list():
    users = [
        {
            'name': '小明',
            'age': 18,
            'gender': '男'
        },
        {
            'name': '小红',
            'age': 20,
            'gender': '女'
        }
    ]
    return jsonify(users)

if __name__ == '__main__':
    app.run()

3、自定义JsonEncoder的参数

Flask Jsonify函数还支持定义自定义Json序列化器,即JsonEncoder。我们可以在Flask应用程序初始化时,通过app.json_encoder属性设置自定义的JsonEncoder。
from flask import Flask, jsonify
import json

class UserEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, User):
            return {
                'name': o.name,
                'age': o.age,
                'gender': o.gender
            }
        return json.JSONEncoder.default(self, o)

app = Flask(__name__)
app.json_encoder = UserEncoder

class User:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

@app.route('/user')
def user():
    user = User('小明', 18, '男')
    return jsonify(user)

if __name__ == '__main__':
    app.run()
上述代码中,我们自定义了一个UserEncoder类,并继承了json.JSONEncoder。该类重写了default方法,判断如果传入对象是User类型,则使用该对象的属性生成一个字典对象,并返回该字典对象。当然,我们还需要在Flask应用程序初始化时,通过app.json_encoder属性设置UserEncoder为自定义的JsonEncoder。

4、其它参数

在Flask Jsonify函数中,还支持一些其它的参数。例如: - status_code:指定返回的Http状态码,默认为200; - headers:指定返回的Http头部信息; - indent:指定Json的缩进量; - separators:指定Json中各项之间的分隔符; - cls:指定JsonEncoder。

四、小结

Flask Jsonify是一个很实用的Python库,可以方便地将Python对象转换为Json格式返回到客户端。本文简单介绍了Flask Jsonify的使用方法和参数,希望对大家有所帮助。