Python json函數與Flask jsonify函數


JSON數據結構

要把json與字典區分開來 dumps(字典轉換成Json) loads(Json轉換成字典)

參考:

Python 的字典是一種數據結構,JSON 是一種數據格式。

json 就是一個根據某種約定格式編寫的純字符串,不具備任何數據結構的特征。而 python 的字典的字符串表現形式的規則看上去和 json 類似,但是字典本身是一個完整的數據結構,實現了一切自身該有的算法。

Python的字典key可以是任意可hash對象,json只能是字符串。

形式上有些相像,但JSON是純文本的,無法直接操作。

1.python dict 字符串用單引號,json強制規定雙引號。
2.python dict 里可以嵌套tuple,json里只有array。 json.dumps({1:2}) 的結果是 {"1":2}; json.dumps((1,2)) 的結果是[1,2]
3.json key name 必須是字符串,   python 是hashable,  {(1,2):1} 在python里是合法的,因為tuple是hashable type;{[1,2]:1} 在python里TypeError: unhashable "list"
4.json: true false null ;  python:True False None

python {"me": "我"} 是合法的;    json 必須是 {"me": "\u6211"}

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。適用於進行數據交互的場景,比如網站前台與后台之間的數據交互。

JSON和XML的比較可謂不相上下。

Python 3中自帶了JSON模塊,直接import json就可以使用了。

官方文檔:http://docs.python.org/library/json.html

Json在線解析網站:http://www.json.cn/#

一個簡單的Json數據:

{
    "name":"張三",
    "age":19,
    "major":["挖掘機","炒菜","編程"],
    "hasCar":false,
    "child":[{"name":"小明","age":2},{"name":"小花","age":2}]
}

Python中的Json模塊

導入json即可開始使用

import json

json模塊提供了四個功能:dumps、dump、loads、load,用於字符串 和 python數據類型間進行轉換。

1.json.loads()

Json -> Python字典

import json

strList = '[1, 2, 3, 4]'

strDict = '{"city": "北京", "name": "大貓"}'

json.loads(strList)
# [1, 2, 3, 4]

json.loads(strDict) # json數據自動按Unicode存儲
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}

2.json.dumps()

Python字典 -> Json

import json
import chardet

listStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "大貓"}

json.dumps(listStr)
# '[1, 2, 3, 4]'
json.dumps(tupleStr)
# '[1, 2, 3, 4]'

# 注意:json.dumps() 序列化時默認使用的ascii編碼
# 添加參數 ensure_ascii=False 禁用ascii編碼,按utf-8編碼
# chardet.detect()返回字典, 其中confidence是檢測精確度

json.dumps(dictStr)
# '{"city": "\\u5317\\u4eac", "name": "\\u5927\\u5218"}'

chardet.detect(str(json.dumps(dictStr)).encode())
# {'confidence': 1.0, 'encoding': 'ascii'}

print(json.dumps(dictStr, ensure_ascii=False))
# {"city": "北京", "name": "大劉"}

chardet.detect(json.dumps(dictStr, ensure_ascii=False))
# {'confidence': 0.99, 'encoding': 'utf-8'}

3.json.dump()

將Python內置類型序列化為json對象后寫入文件

import json

listStr = [{"city": "北京"}, {"name": "大劉"}]
json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)

dictStr = {"city": "北京", "name": "大劉"}
json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)

4.json.load()

讀取文件中json形式的字符串元素 轉化成python類型

import json

strList = json.load(open("listStr.json"))
print(strList)

# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]

strDict = json.load(open("dictStr.json"))
print(strDict)
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

Flask jsonify函數

簡單,快速是Flask自帶的模塊 功能類似於json.dumps(),但是會把返回的Content-Typetext/html轉換成帶json特征的 application/json

Response在Flask框架中是一個class,當application的view方法處理完成,return 結果給Flask的時候,他會判斷結果的類型,如果是string,則分會text/html, 如果是tuple, 同樣

使用演示

app.py
最終結果

注意:jsonify不能跟json一樣轉換成字典或字符串在控制台打印出來,只有在Flask的return過程中才能使用,聽起來雖然有點雞肋 但是在Flask開發中確實好用;奧利給!


免責聲明!

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



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