一 JSON数据结构

要把json与字典区分开来 dumps(字典转换成Json)                loads(Json转换成字典)

Python 的字典是一种数据结构,JSON 是一种数据格式。

json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。

Python的字典key可以是任意可hash对象,json只能是字符串。

形式上有些相像,但JSON是纯文本的,无法直接操作。

1.python dict 字符串用单引号,json强制规定双引号。
2.python dict 里可以嵌套tuple,json里只有array。 json.dumps({1:2}) 的结果是 {"1":2}; json.dumps((1,2)) 的结果是[1,2]
3.json key name 必须是字符串,   python 是hashable,  {(1,2):1} 在python里是合法的,因为tuple是hashable type;{[1,2]:1} 在python里TypeError: unhashable "list"
4.json: true false null ;  python:True False None

python {"me": "我"} 是合法的;    json 必须是 {"me": "\u6211"}

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

官方文档:http://docs.python.org/library/json.html

Json在线解析网站:http://www.json.cn/#

Python中的Json模块

导入json即可开始使用:import json

json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。

1.json.loads()

Json -> Python字典

import jsonstrList = '[1, 2, 3, 4]'strDict = '{"city": "北京", "name": "大猫"}'json.loads(strList)
# [1, 2, 3, 4]json.loads(strDict) # json数据自动按Unicode存储
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}

2.json.dumps()

Python字典 -> Json

import json
import chardetlistStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "大猫"}json.dumps(listStr)
# '[1, 2, 3, 4]'
json.dumps(tupleStr)
# '[1, 2, 3, 4]'# 注意:json.dumps() 序列化时默认使用的ascii编码
# 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
# chardet.detect()返回字典, 其中confidence是检测精确度json.dumps(dictStr)
# '{"city": "\\u5317\\u4eac", "name": "\\u5927\\u5218"}'chardet.detect(str(json.dumps(dictStr)).encode())
# {'confidence': 1.0, 'encoding': 'ascii'}print(json.dumps(dictStr, ensure_ascii=False))
# {"city": "北京", "name": "大刘"}chardet.detect(json.dumps(dictStr, ensure_ascii=False))
# {'confidence': 0.99, 'encoding': 'utf-8'}

3.json.dump()

将Python内置类型序列化为json对象后写入文件

import jsonlistStr = [{"city": "北京"}, {"name": "大刘"}]
json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)dictStr = {"city": "北京", "name": "大刘"}
json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)

4.json.load()

读取文件中json形式的字符串元素 转化成python类型

import jsonstrList = json.load(open("listStr.json"))
print(strList)# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]strDict = json.load(open("dictStr.json"))
print(strDict)
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

二 Flask jsonify函数

简单,快速是Flask自带的模块 功能类似于json.dumps(),但是会把返回的Content-Typetext/html转换成带json特征的 application/json

Response在Flask框架中是一个类,return 结果给Flask的时候,他会判断结果的类型,如果是string,就当字符串封装为Response放回。 如果是jsonify会被直接转化为json类型的Response对象返回,并且回复头显示application/json类型

使用演示

打印jsonify内的数据:

from flask import jsonify
from flask import Flask
app=Flask(__name__)
with app.app_context():
aaa={
"a":1,
"b":2,
"c":[3,4,5]
}
response_obj=jsonify(aaa) #
print(type(response_obj)) #flask.wrappers.Response
print(response_obj.data) #打印数据
print(response_obj.content_type) #打印内容类型
print(response_obj.status) #状态码及状态(字符串)
print(response_obj.status_code) #状态码 (int类型)
print(response_obj.is_json) #是否是json (bool类型)

demo:

python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到。如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json格式的数据到客户端。

  1. from flask import Flask
  2. from flask import jsonify
  3. from flask import Response
  4. app = Flask(__name__)
  5. @app.route('/hello/<name>/<words>',methods=['GET'])
  6. def hello(name,words):
  7. return jsonify({'name':name,'words':words})#也可以传入key=value形式的参数,如jsonify(name=name,words=words)
  8. if __name__ == '__main__':
  9. app.run()

用chrome浏览器访问得到的页面如下图:

现在我们改为使用python自带的json库json.dumps作为视图函数的直接返回值,代码如下:

  1. from flask import Flask
  2. from flask import jsonify
  3. from flask import Response
  4. app = Flask(__name__)
  5. @app.route('/hello/<name>/<words>',methods=['GET'])
  6. def hello(name,words):
  7. return json.dumps({'name':name,'words':words})
  8. if __name__ == '__main__':
  9. app.run()

PS:直接返回json.dumps的结果是可行的,因为flask会判断并使用make_response方法自动构造出响应,只不过响应头各个字段是默认的。若要自定义响应字段,则可以使用make_response或Response自行构造响应。用chrome访问的响应页面如下图。

总结:从上面可以看出:两者似乎只是Content-Type发生了变化。由此可以推测出jsonify(application/json)<==>修改返回头后的json.dump(text/html)

参考:https://blog.csdn.net/kun1280437633/article/details/80377734

flask中jsonify和json区别相关推荐

  1. Flask中jsonify和json.dumps用法以及区别(简单案例)

    环境:python3.6,  Flask1.0.3 flask提供了jsonify函数供用户处理返回的序列化json数据, 而python自带的json库中也有dumps方法可以序列化json对象. ...

  2. Flask中 jsonify有什么作用?如何使用?

    Flask中 jsonify有什么作用?如何使用? jsonify是Flask框架提供的一个函数,用于将Python对象转换为JSON格式的响应.它将Python对象转换为JSON格式的字符串,并将其 ...

  3. flask中jsonify遇到的坑

    1.jsonify可以将字典转换成json对象传入前端 data = {"movie": movie_list,"page": page,"dic_l ...

  4. 在flask中使用jsonify和json.dumps的区别

    flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象,那么在flask的视图函数中return它们会有什么不同 ...

  5. Flask框架(flask中设置响应信息的方法,返回json数据的方法)

    设置响应信息的方法 1.  返回自定义的响应头,有两种方式: (1)  第一种是:视图函数return的时候,使用元组,返回自定义的信息           返回的时候的状态码可以自定义信息:&quo ...

  6. python返回json数据_python和flask中返回JSON数据的方法

    在python中可以使用json将数据格式化为JSON格式: 1.将字典转换成JSON数据格式: s=['张三','年龄','姓名'] t={} t['data']=s return json.dum ...

  7. flask中的jsonify

    示例代码 # -*- coding: utf-8 -*- # @Time : 2020/9/17 11:46 下午 # @Author : renwoxing # @File : flask_rest ...

  8. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  9. python post json参数,Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

最新文章

  1. 【OpenGL】关于OpenGL中Bind函数的理解
  2. 多种负载均算法及其 Java 代码实现 --转
  3. Pytorch中图像预处理相关函数
  4. 大话设计模式—观察者模式
  5. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍
  6. Javascript 仿Flash 图片切换 及 Flash 图片切换
  7. 第 19 次 CCF CSP 认证 202006-4 1246(digits)
  8. Ubuntu禁用网卡步骤(重启依然生效)
  9. vector中resize()和reserve()区别
  10. 高一计算机专业班主任工作总结,07计算机5班班主任工作总结
  11. QGIS教程—缓冲区buffer
  12. 了解速率控制模式Rate Control Mode-CBR,VBR,CRF(x264、x265、vpx)
  13. 如何控制局域网网速_单臂路由|N1盒子(OpenWRT)单线多拨实现网速叠加
  14. ubuntu下安装vmware workstation
  15. 业余草尚硅谷Java视频教程_SpringBoot视频教程免费下载
  16. P1919 FFT加速高精度乘法
  17. 第一单元 用python学习微积分(五) 隐函数微分法和逆函数导数(下)- 反函数
  18. 腾讯开源云原生成本优化神器 - FinOps Crane
  19. cad特性匹配快捷键命令_CAD复制图形或特性的相关命令和操作
  20. Unity小游戏-平衡大师(安卓、PC、web)2D益智类游戏 项目展示+完整项目源码

热门文章

  1. 多人游戏用 TCP 还是UDP
  2. matlab 画波特图
  3. websocket实现弹幕以及聊天
  4. 丹佛斯变频器FC360多段速控制
  5. Tableau 七、多边形地图和背景图地图:设置地理信息(自定义地图码导入、设置地图源)
  6. SpringBoot 使用MultipartFile上传组件实现本地上传用户头像
  7. 根据还款期数和首次还款时间计算本期还款时间
  8. 微软技术支持(CSS)冬季实习生面试经验
  9. RK 61 键盘 Ubuntu 下键位映射修改方案
  10. 我爱上了幕布这个软件