Flask 的 jsonify


 

from flask import Flask, jsonify app = Flask(__name__) tasks = [ { 'id': 1, 'title': u'訂閱 python_mastery 專欄', 'description': u'專欄Link: https://xiaozhuanlan.com/python_mastery' }, { 'id': 2, 'title': u'訂閱 pythonml 專欄', 'description': u'專欄Link: https://xiaozhuanlan.com/pythonml' } ] @app.route('/api/v1.0/tasks', methods=['GET']) def get_tasks(): return jsonify({'tasks': tasks}) if __name__ == '__main__': app.run(debug=True)





Flask 框架里,可以用 jsonify 返回 json 數據,但是為什么不用 Python 自帶的 json 模塊返回 JSON 數據呢?

其實,jsonify 在處理數據過程中,對數據做 JSON 序列化處理時,用的是 itsdangerous 模塊里的 JSON ,讓我們看一下,這個模塊里的 JSON 是如何引入的
try: import simplejson as json except ImportError: import json

在Flask框架中,引入過程如下
from itsdangerous import json as _json

對於數據的序列化處理,用的正是 _json.

jsonify 和 json 是殊途同歸,那么為什么要費周折繞這么一圈呢?

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

1.Content-Type 的差別

但是使用 jsonify 時,返回的 http response 的 Content-Type 是

Content-Type: application/json


而使用json.dumps時,Content-Type則是

Content-Type: text/html; charset=utf-8既然返回的是 json 數據,那么自然要指明 Content-Type 是 application/json , 這樣做是符合 HTTP 協議的規定的,


2. 減小數據量

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

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

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



import json data = {'name': 'lilei', 'age': 30} print(json.dumps(data, separators=(',', ':'))) print(json.dumps(data))


{"name":"lilei","age":30} {"name": "lilei", "age": 30}

只需要在 dumps 參數里指定 separators 即可,其實在 jsonify 里就是這么干的
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM