前言

在做网站前后端数据交互的时候,我们经常需要使用Ajax等方法向后端发送请求来获取响应的数据,而我们经常需要的就是json格式的响应数据,它实际上就是一个字符串。要知道Flask如何返回json响应数据,首先就需要知道如何将字典dict转化为json字符串。

使用json库dict和json字符串的转化

import json
def dict_to_json():
    data = {"name": "mjl", "pwd": "123456"}
    print(type(data)) #dict
    # 将dict转为json字符串
    res = json.dumps(data)
    print(type(res))  # str  '{"name": "mjl", "pwd": "123456"}'

    # 将json字符串转为dict
    rec = json.loads(res)
    print(type(res))  # dict {'name': 'mjl', 'pwd': '123456'}

使用json库返回json响应数据

@app.route('/test1', methods=["GET", "POST"])
def test1():
    data = {
        "name": "mjl",
        "age": 21,
    }
    res_json = json.dumps(data)
    return res_json

浏览器请求如下:

Flask使用json或jsonify返回响应的数据_Flask

结论

数据结果正确返回,如果单纯直接返回响应消息,Content-Type:text/html 是不正确的,应该改为application/json 才对。

解决

设置响应消息的headers,比较麻烦

# return 响应体, 状态码, 响应头
    return res_json, 200, {"Content-Type":"application/json"}

使用jsonify返回json响应数据(推荐使用)

from flask import jsonify
@app.route('/test2', methods=["GET", "POST"])
def test2():
    data = {
        "name": "mjl",
        "age": 21,
    }
    return jsonify(data)

浏览器请求如下:

Flask使用json或jsonify返回响应的数据_Flask_02

结论

jsonify可以正确且简单的返回响应数据。

jsonify不单单可以将dict转为json响应数据,还可以直接往里面写参数值

@app.route('/test3', methods=["GET", "POST"])
def test3():
    return jsonify(name='mjl',age=21)