美文网首页
Flask返回JSON时json.dumps和jsonify的区

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

作者: YJ的笔记 | 来源:发表于2018-10-26 16:39 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Flask返回JSON时json.dumps和jsonify的区

          本文链接:https://www.haomeiwen.com/subject/lekltqtx.html