1.Content-Type有區(qū)別
jsonify的作用實(shí)際上就是將我們傳入的json形式數(shù)據(jù)序列化成為json字符串催训,作為響應(yīng)的body现使,并且設(shè)置響應(yīng)的Content-Type為application/json,構(gòu)造出響應(yīng)返回至客戶端一汽。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實(shí)際上也是使用了json.dumps來序列化json形式的數(shù)據(jù)避消,作為響應(yīng)正文返回。indent表示json格式化的縮進(jìn),若是Ajax請(qǐng)求則不縮進(jìn)(因?yàn)橐话鉇jax數(shù)據(jù)沒必要直接展示)岩喷,否則縮進(jìn)2格恕沫。但想必從第一部分的實(shí)驗(yàn)結(jié)果我們已經(jīng)看出來了,使用jsonify時(shí)響應(yīng)的Content-Type字段值為application/json纱意,而使用json.dumps時(shí)該字段值為text/html婶溯。Content-Type決定了接收數(shù)據(jù)的一方如何看待數(shù)據(jù),如何處理數(shù)據(jù)妇穴,如果是application/json,則可以直接當(dāng)做json對(duì)象處理隶债,若是text/html腾它,則還要將文本對(duì)象轉(zhuǎn)化為json對(duì)象再做處理(個(gè)人理解,有誤請(qǐng)指正)死讹。
2.接受參數(shù)有區(qū)別
jsonify可以接受和python中的dict構(gòu)造器同樣的參數(shù)瞒滴,如下圖。
而json.dumps比jsonify可以多接受list類型和一些其他類型的參數(shù)赞警。但我試了一下妓忍,形式為key1=value1,[key2=value2,...]這樣的參數(shù)是不行的愧旦,會(huì)報(bào)出“TypeError: dumps() takes exactly 1 argument (0 given)”這一錯(cuò)誤世剖,而jsonify不會(huì)報(bào)錯(cuò)并能正常返回?cái)?shù)據(jù)。
總結(jié):
?jsonify生成的是一個(gè)響應(yīng)對(duì)象
?jsonify生成的響應(yīng)對(duì)象里面笤虫,contentType為application/jsonc
?json.dumps生成的結(jié)果是一個(gè)字符串旁瘫,在進(jìn)行前端返回時(shí),contentType為text/html