前言
在做网站前后端数据交互的时候,我们经常需要使用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
浏览器请求如下:
结论
数据结果正确返回,如果单纯直接返回响应消息,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)
浏览器请求如下:
结论
jsonify可以正确且简单的
返回响应数据。
注
jsonify
不单单可以将dict转为json响应数据,还可以直接往里面写参数值
@app.route('/test3', methods=["GET", "POST"])
def test3():
return jsonify(name='mjl',age=21)