在python中,序列化是指把Python的對象編碼轉化爲JSON格式的字符串;反序列化則是相反,是把JSON格式的字符串解碼爲Python數據對象。其中專門提供了JSON庫來處理這個過程。python
1、JSON庫的應用json
把內置數據結構如元組、字典、列表進行序列化處理後,類型爲str(字符串),而通過反序列化處理後,數據結構依然是列表和字典(元組通過序列化和反序列化後數據類型爲字典,再也不是元組)。在JSON庫中,序列化和反序列化的處理是分爲兩部分的,一部分是對具體列表數據的處理,另外一部分是對文件內容的處理。數據結構
一、轉化實例代碼以下:app
# -*- coding: utf-8 -*-
# python3.6
import json # 列表 list1 = [1,2,3,4,5] print(list1) print("對列表進行序列化和反序列化的處理:") print("列表未進行序列化以前的數據類型爲:",type(list1)) # 對列表進行序列化處理 list_str = json.dumps(list1) print("列表序列化後的內容爲:{0},類型爲:{1}".format(list_str,type(list_str))) # 對字符串list_str進行反序列化 str_list = json.loads(list_str) print("字符串反序列化後的內容爲:{0},類型爲:{1}".format(str_list,type(str_list))) # 元組 tuple1 = ('name','huzi','age') print(tuple1) print("對元組進行序列化和反序列化的處理:") print("元組未序列化以前的數據類型爲:",type(tuple1)) # 對元組tuple1進行序列化處理 tuple_str = json.dumps(tuple1) print("元組tuple1序列化後的內容爲:{0},類型爲:{1}".format(tuple_str,type(tuple_str))) # 對字符串tuple_str反序列化的處理 str_tuple = json.loads(tuple_str) print("字符串tuple_str反序列化後的內容爲:{0},類型爲:{1}".format(str_tuple,type(str_tuple))) # 字典 dict1 = {'name':'huzi','age':'22'} print(dict1) print("對字典進行序列化與反序列化的處理") print("字典未序列化以前的數據類型爲:",type(dict1)) # 對字典dict1進行序列化處理 dict_str = json.dumps(dict1) print("字典dict1序列化後的內容爲:{0},類型爲:{1}".format(dict_str,type(dict_str))) # 對字符串dict_str進行反序列化處理 str_dict = json.loads(dict_str) print("字符串dict_str序列化後的內容爲:{0},類型爲:{1}".format(str_dict,type(str_dict)))
打印結果以下:post
二、實例應用代碼以下:編碼
在實際服務端與客戶端的數據交互中,客戶端發送請求到服務端,服務端響應回覆數據給客戶端,客戶端拿到響應數據後就把這些數據存儲在文件中了 ,而後後續再繼續對文件的數據進行處理,在處理的過程當中須要進行序列化與反序列化處理,而序列化的過程其實是把數據存儲在文件中的過程,反序列化的過程是讀取文件裏邊的內容的過程。記錄一個例子,例子內容爲把服務端返回的數據存儲在文件中,而後再讀取文件的內容url
""" 請求接口爲 http://**9.*7.**.**3:8000/login , 把服務端返回的響應數據存儲在文件中,而後對文件反序列化處理獲取裏面的具體的值 """
import requests import json def login(): headers = { 'Content-Type': 'application/json'} data = {"userName":"11111111112","password":"123456"} response = requests.post( url = 'http://**9.*7.**.**3:8000/login', json = data, headers = headers ) versionInfo = response.text print("返回的參數未序列化以前的數據類型爲:{0},內容爲 {1}".format(type(versionInfo),versionInfo)) # 把服務端返回的響應數據序列化並存儲在文件中 json.dump(response.json(),open('json.md','w')) login() # 對文件進行反序列化處理,取值message對應的value具體值 dict1 = json.load(open('json.md','r')) print("文件數據反序列化後的類型爲:{0},內容爲:{1}".format(type(dict1),dict1)) print("message對應的value的值爲:{0}".format(dict1['message']))
打印結果爲:spa