flask学习记录03-json数据类型的接收、转换和返回

感谢关注测试开发萌货,我是测试小孟,快跟小孟一起来复习/学习flask框架吧~

图片

今天主要分享json数据格式,核心如下:

  1.json.loads将json转换为字典  2.json.dumps将字典转换为json  3.jsonify将字典转换为json  4.解决浏览器中json数据,中文无法展示的问题

json介绍

json其实就是一个类似于python中字典的字符串,用于浏览器和服务器进行数据传输的一种数据格式

json在项目中的使用

1.接收json,并通过json.loads处理为字典,方便后端处理

from flask import Flask
import json

app = Flask(__name__)

@app.route('/json2')
def demo2():
    json_demo = {"age": 10, "name": "meng", "area": "CHN"}
    # dumps将json转换为字典
    result=json.loads(json_demo)
    return result

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


可以通过调试看到result已经变为dict字典数据类型

2.前端处理数据大多数都是需要json类型的数据,这里通过json.dumps方法将字典转换为json数据类型返回给前端

from flask import Flask
import json

app = Flask(__name__)

@app.route('/json')
def demo1():
    json_dict = {"age":10,"name":"meng","area":"CHN"}
    # dumps将字典转换为json
    result=json.dumps(json_dict,ensure_ascii=False)
    print(type(result))
    return result

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

通过调试可以看到已经转换为json类型的字符串

还可以通过flask框架中的jsonify将字典类型的数据转化为json返回给前端

from flask import Flask
import json

app = Flask(__name__)

@app.route('/json2')
def demo2():
    json_demo = {"age": 10, "name": "meng", "area": "CHN"}
    # jsonify将字典转为json,并返回给前端content-type:application/json
    return jsonify(json_demo)

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

返回json类型字符串,请求头默认设置content-type:application/json

中间遇到过一个问题:浏览器中json数据,中文无法展示。默认展示的是unicode格式,尝试通过在json.loads方法中设置encoding='utf-8',亲身试了下是不行的,如下图所示

后来终于找到了答案,在app配置中将JSON_AS_ASCII设置为False,立马OK

from flask import Flask
import json

app = Flask(__name__)

# 解决浏览器中json数据,中文无法展示的问题
app.config['JSON_AS_ASCII']=False


@app.route('/json2')
def demo2():
    json_demo = {"age": 10, "name": "meng", "area": "上海"}
    # jsonify将字典转为json,并返回给前端content-type:application/json
    return jsonify(json_demo)

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

输出如下

好了,本次分享到这里,下一节会通过BaseConveter的源码,复习flask框架中的自定义转换器、重定向和错误捕获。

欢迎关注微信公众号【测试开发萌货】,获取更多测试干货~

posted @ 2021-10-28 19:11  梦途的测开笔记  阅读(743)  评论(0编辑  收藏  举报