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-Type
從text/html
轉換成帶json特征的 application/json
Response在Flask框架中是一個class,當application的view方法處理完成,return 結果給Flask的時候,他會判斷結果的類型,如果是string,則分會text/html, 如果是tuple, 同樣
使用演示
注意:jsonify不能跟json一樣轉換成字典或字符串在控制台打印出來,只有在Flask的return過程中才能使用,聽起來雖然有點雞肋 但是在Flask開發中確實好用;奧利給!