概念:
啊序列化(Serialization):將對象的狀態信息轉換為可以存儲或可以通過網絡傳輸的過程,傳輸的格式可以是JSON,XML等。反序列化就是從存儲區域(JSON,XML)讀取反序列化對象的狀態,重新創建該對象。
JSON(Java Script Object Notation):一種輕量級數據交互格式,相對於XML而言更簡單,也易於閱讀和編寫,機器也方便解析和生成,Json是JavaScript中的一個子集。
json提供四個功能:dumps, dump, loads, load
dumps 功能:將數據通過特殊的形式轉換為所有程序語言都認識的字符串
實例
import json data = {'startTime':'2018-03-13','phone':'1','endTime':'2018-03-14','pageIndex':1,'pageSize':50,'integralType':2} #一個數組 json_str13 = (json.dumps(data, indent=20,ensure_ascii=True,sort_keys=False,separators=(',',';'))) #轉換為json
print(json_str13)
{
"startTime";"2018-03-13",
"phone";"1",
"endTime";"2018-03-14",
"pageIndex";1,
"pageSize";50,
"integralType";2
}
注釋:dumps里面的參數indent,ensure_ascii,sort_keys,separators
indent 的作用相當於對json的格式進行了排序 ,並給他間隔,如indent=4
json.dumps(data)
{"startTime";"2018-03-13","phone";"1","endTime";"2018-03-14","pageIndex";1,"pageSize";50,"integralType";2}
json.dumps(data, indent=4)
{ "startTime";"2018-03-13", "phone";"1", "endTime";"2018-03-14", "pageIndex";1, "pageSize";50, "integralType";2 }
ensure_ascii的作用相當於是否直接顯示中文 ,如ensure_ascii=True
json.dumps(data, indent=4,ensure_ascii=True)
{ "startTime";"\u6d4b\u8bd5", "phone";"1", "endTime";"2018-03-14", "pageIndex";1, "pageSize";50, "integralType";2 }
json.dumps(data, indent=4,ensure_ascii=False)
{ "startTime";"測試", "phone";"1", "endTime";"2018-03-14", "pageIndex";1, "pageSize";50, "integralType";2 }
sort_keys的作用相當於先把字母的排序在返回json ,如sort_keys=False
json.dumps(data, indent=4,ensure_ascii=False,sort_keys=False)
{
"startTime";"測試",
"phone";"1",
"endTime";"2018-03-14",
"pageIndex";1,
"pageSize";50,
"integralType";2
}
json.dumps(data, indent=4,ensure_ascii=False,sort_keys=True)
{
"endTime";"2018-03-14",
"integralType";2,
"pageIndex";1,
"pageSize";50,
"phone";"1",
"startTime";"測試"
}
separators的作用相當json的格式是怎么樣的 ,如separators=(',',';')
json.dumps(data, indent=4,ensure_ascii=False,sort_keys=True,separators=(',',';'))
{
"endTime";"2018-03-14",
"integralType";2,
"pageIndex";1,
"pageSize";50,
"phone";"1",
"startTime";"測試"
}
json.dumps(data, indent=4,ensure_ascii=False,sort_keys=True,separators=('¥','%'))
{
"endTime"%"2018-03-14"¥
"integralType"%2¥
"pageIndex"%1¥
"pageSize"%50¥
"phone"%"1"¥
"startTime"%"測試"
}
loads 功能:json編碼的字符串再轉換為python的數據結構
json_str={"startTime": "測試", "phone": "1", "endTime": "2018-03-14", "pageIndex": 1, "pageSize": 50, "integralType": 2}
json.loads(json_str) {'startTime': '測試', 'phone': '1', 'endTime': '2018-03-14', 'pageIndex': 1, 'pageSize': 50, 'integralType': 2}
dump 功能 將數據通過特殊的形式轉換為所有程序語言都認識的字符串,並寫入文件
url=‘測試測試測試’
file = open('D:/tmp.json','w') #打開一個文件,給他一個寫的權限
json.dump(url,file) #把他寫到文件里面去
file.close() #關閉文件
load 功能從數據文件中讀取數據,並將json編碼的字符串轉換為python的數據結構
with open('D:/tmp.json','r') as f: #打開這個文件,給他一個讀的權限
print(json.load(f)) #讀這個文件
測試測試
說明
json編碼支持的基本類型有:None, bool, int, float, string, list, tuple, dict.
對於字典,json會假設key是字符串(字典中的任何非字符串key都會在編碼時轉換為字符串),要符合JSON規范,應該只對python列表和字典進行編碼。此外,在WEB應用中,把最頂層對象定義為字典是一種標准做法。
json編碼的格式幾乎和python語法一致,略有不同的是:True會被映射為true,False會被映射為false,None會被映射為null,元組()會被映射為列表[],因為其他語言沒有元組的概念,只有數組,也就是列表。