python中json序列化的東東
阿新 • • 發佈:2018-12-12
之所以寫這個因為自己總是弄混了,容易弄錯,記下來有事沒事看看
序列化是指把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化用(使用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)