之所以寫這個因為自己總是弄混了,容易弄錯,記下來有事沒事看看
序列化是指把變量從內存中變成可存儲或傳輸的過程稱之為序列化用(使用dump或者dumps),把變量內容從序列化的對象重新讀到
內存里稱之為反序列化(使用load或者loads)
如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標准格式,比如XML,但更好的方法是序列化為JSON,因為JSON
表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標准格式,並且比XML更快,
而且可以直接在Web頁面中讀取,非常方便
JSON和Python內置的數據類型對應如下:
dumps()方法返回一個str,內容就是標准的JSON。類似的,dump()方法可以直接把JSON寫入一個file_Object。要把JSON反序列化為
Python對象,用loads()或者對應的load()方法,前者把JSON的字符串反序列化,后者從file_Object中讀取字符串並反序列化
實例
dumps序列化一個對象
data= {
"廣州市": { "番禺區": ["南村鎮", "大石鎮", "欖核鎮"], "天河區": ["廣州塔", "中信廣場", "天河又一城"] } }
s = json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)
print(s)
#dumps:序列化一個對象 sort_keys:根據key排序 indent:以4個空格縮進,輸出閱讀友好型 ensure_ascii: 可以序列化非ascii碼(中文等)
dump:將一個對象序列化存入文件
dump()的第一個參數是要序列化的對象,第二個參數是打開的文件句柄 注意打開文件時加上以UTF-8編碼打開
with open("data.json", "w", encoding="UTF-8") as f:
s = json.dump(data, f, ensure_ascii=False)
運行此文件之后在統計目錄下會有一個data.json文件

反序列化
load:從一個打開的文件句柄加載數據,注意打開的文件編碼
with open("data.json", "r", encoding="UTF-8") as f:
r = json.load(f)
print(r)

loads: 從一個對象加載數據
a = json.loads(data)
print(a)
不加ensure_ascii=False 結果是

加入ensure_ascii=False
a = json.loads(data,ensure_ascii=False) 要注意
print(a)

a=json.loads(input("請輸入添加的數據:"),enconding='utf-8')
print(a)

