Python2.7 自定義類的序列化與反序列號
阿新 • • 發佈:2020-10-27
關於自定義類的序列化與反序列化,有一篇部落格介紹的方法比較通用:
https://www.cnblogs.com/magic8sky/p/10475704.html
但是這個方法在Python2.7中好像有問題(同時沒有驗證Python3中是否OK),在這裡介紹一種方法,但是並不是非常好,需要針對每個自定義類編寫特定的序列化、反序列化類。
下面的程式碼用於將一個List物件(元素是FolderInfo物件)進行序列化與反序列化。
FolderInfo.py
import json class FolderInfo: root = "" fileList = [] def __init__(self): pass def toJson(self): overdict = self.__dict__ # result = json.dumps(overdict, ensure_ascii=False) result = json.dumps(overdict) return result
FolderInfoListDecoder.py
from FolderInfo import FolderInfo import json class FolderInfoListDecoder(json.JSONDecoder):def decode(self, s): folderInfoes = [] folderInfoListObj = super(FolderInfoListDecoder, self).decode(s) for folderInfoStr in folderInfoListObj: folderInfo = FolderInfo() folderInfoObj = super(FolderInfoListDecoder, self).decode(folderInfoStr)for k, v in folderInfoObj.iteritems(): if k == "root": folderInfo.root = v elif k == "fileList": folderInfo.fileList = v folderInfoes.append(folderInfo) return folderInfoes
FolderInfoListEncoder.py
from FolderInfo import FolderInfo import json class FolderInfoListEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, FolderInfo): return field.toJson() else: return json.JSONEncoder.default(self, field)
反序列化
folderInfoList = json.loads(folderInfoListJson, cls=FolderInfoListDecoder)
序列化
fileInfoListJson = json.dumps(folderInfoList, cls=FolderInfoListEncoder)