聊一聊 Flask 的 jsonify

2021-09-29 09:12:40 字數 2553 閱讀 4290

首先我們來看一段 python **

from flask import flask, jsonify

tasks =[,

]'/api/v1.0/tasks'

, methods=

['get'])

defget_tasks()

:return jsonify(

)if __name__ ==

'__main__'

:true

)

在這段**裡面,我們看到了今天的主角jsonify

flask 框架裡,可以用jsonify返回 json 資料,但是為什麼不用python自帶的json模組返回 json 資料呢?

其實,jsonify在處理資料過程中,對資料做 json 序列化處理時,用的是itsdangerous模組裡的 json ,讓我們看一下,這個模組裡的 json 是如何引入的

try

:import ******json as json

except importerror:

import json

它會先嘗試引入******json,如果沒有安裝這個模組,則引入 python 原生模。

在flask框架中,引入過程如下

from itsdangerous import json as _json
對於資料的序列化處理,用的正是_json.

前面講到,jsonifyjson是殊途同歸,那麼為什麼要費周折繞這麼一圈呢?

肯定存在乙個合理的原因讓jsonify存在的有意義。

這個原因就是content-type

看下面兩段**

第一段**

##  jsonify

import json

from flask import flask, jsonify

'/json'

)def

test_json()

: data =

return jsonify(data)

"0.0.0.0"

, port=

9877

)

在瀏覽器裡輸入 得到的結果是

第二段**:

## json

import json

from flask import flask, jsonify

'/json'

)def

test_json()

: data =

return json.dumps(data)

"0.0.0.0"

, port=

9877

)

在瀏覽器裡輸入 得到的結果是

從內容上看,兩種方法沒有區別。

但是使用jsonify時,返回的http responsecontent-type

而使用json.dumps時,content-type則是

content-type: text/html; charset=utf-

8

使用jsonify除了讓返回的 `http response符合 http 協議,同時也對資料做了壓縮處理,讓資料體積更小。

仔細比較上面兩種方法返回的資料,雖然內容相同,但jsonify返回的資料,每個key-value對之間的逗號,和每個keyvalue之間的冒號後面都是沒有空格的,而json.dumps返回的資料裡,卻在逗號和冒號後面存在空格,因此即便內容相同,jsonify返回的資料體積更小,更節省流量。

其實,json.dumps也可以將這些不必要的空格去掉,看下面的**

import json

data =

print

(json.dumps(data, separators=

(','

,':'))

)print

(json.dumps(data)

)

輸出結果為

只需要在dumps引數裡指定separators即可,其實在jsonify裡就是這麼幹的。

聊一聊我的二 二

我是乙個二 二一年六月畢業的學軟體技術的大專生 也就是明年畢業 對於任何人來說,這一年裡是充滿挑戰的。可能乙個小小的想法,就會決定未來的走向。二 二 是對於所有人都是複雜的一年,特別是對於我.二 二 一年裡充滿了對於我是充滿悲傷的,疫情爆發,長輩離世,面臨就業問題等等,各種我不敢面對的事情。都出現在...

聊一聊PHP的global

眾所周知,在php的函式中,如果想使用全域性變數,一種是使用超全域性變數 globals,另一種是在函式中使用global關鍵字宣告,使用超全域性變數 globals的方式大家都知道了,今天來好好聊一聊使用global方式來宣告變數。我們來看如下例子 a 1 b 2 function test te...

聊一聊google的Knowledge Graph

它是google用於增強它的搜尋引擎的功能和提高搜尋結果質量的一種技術。在2012年5月16日提出,除了提供基本的與主題相關的鏈結服務之外,它還能結構化與主題相關的資訊。這樣做的目的就是讓使用者無需通過點選多個相關鏈結自己手動去搜尋相關資訊,而是google直接把整合好的結果展示在搜尋頁面,真是太貼...