Flask返回JSON时json.dumps和jsonify的区别?


1.Content-Type有区别

jsonify的作用实际上就是将我们传入的json形式数据序列化成为json字符串,作为响应的body,并且设置响应的Content-Type为application/json,构造出响应返回至客户端。jsonify的部分源码如下:

def jsonify(*args, **kwargs):

if __debug__:

_assert_have_json()

return current_app.response_class(json.dumps(dict(*args, **kwargs),

indent=None if request.is_xhr else 2), mimetype='application/json')

可以看出jsonify实际上也是使用了json.dumps来序列化json形式的数据,作为响应正文返回。indent表示json格式化的缩进,若是Ajax请求则不缩进(因为一般Ajax数据没必要直接展示),否则缩进2格。但想必从第一部分的实验结果我们已经看出来了,使用jsonify时响应的Content-Type字段值为application/json,而使用json.dumps时该字段值为text/html。Content-Type决定了接收数据的一方如何看待数据,如何处理数据,如果是application/json,则可以直接当做json对象处理,若是text/html,则还要将文本对象转化为json对象再做处理(个人理解,有误请指正)。

2.接受参数有区别

jsonify可以接受和python中的dict构造器同样的参数,如下图。

而json.dumps比jsonify可以多接受list类型和一些其他类型的参数。但我试了一下,形式为key1=value1,[key2=value2,...]这样的参数是不行的,会报出“TypeError: dumps() takes exactly 1 argument (0 given)”这一错误,而jsonify不会报错并能正常返回数据。


总结:
 jsonify生成的是一个响应对象

 jsonify生成的响应对象里面,contentType为application/jsonc

 json.dumps生成的结果是一个字符串,在进行前端返回时,contentType为text/html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 第一部分 Python基础篇(80题) 1、为什么学习Python? Python相对于其他编程语言有很多优点: ...
    清清子衿木子水心阅读 1,759评论 0 1
  • 翻译约定 primary data: 主数据resource identifier object 资源标识符对象r...
    sladeliu阅读 2,448评论 0 2
  • - 01 - 我来不及认真地年轻, 待明白过来时, 只能选择认真地老去。 - 02 - 一个不欣赏自己的人, 是...
    秋的旋律阅读 114评论 0 0
  • 这部1998年的动画,堪称神作。动画和配乐都很棒。1998年已经那么现代化。只是主角们有缘相聚,又因原本各自就有各...
    鹿不停阅读 369评论 0 0