相同點
- dump 和 dumps 都實現了序列化
- load 和 loads 都實現反序列化
變量從內存中變成可存儲或傳輸的過程稱之為序列化
序列化是將對象狀態轉化為可保存或可傳輸格式的過程。
變量內容從序列化的對象重新讀到內存里稱之為反序列化
反序列化是流轉換為對象。
區別
1. load 和 loads (反序列化)
load:針對文件句柄,將json格式的字符轉換為dict,從文件中讀取 (將string轉換為dict)
1 |
a_json = json.load(open('demo.json','r')) |
loads:針對內存對象,將string轉換為dict (將string轉換為dict)
1 |
a = json.loads('{'a':'1111','b':'2222'}') |
2. dump 和 dumps(序列化)
dump:將dict類型轉換為json字符串格式,寫入到文件 (易存儲)
1 |
a_dict = {'a':'1111','b':'2222'} |
dumps:將dict轉換為string (易傳輸)
1 |
a_dict = {'a':'1111','b':'2222'} |
總結
根據序列化和反序列的特性
loads: 是將string轉換為dict
dumps: 是將dict轉換為string
load: 是將里json格式字符串轉化為dict,讀取文件
dump: 是將dict類型轉換為json格式字符串,存入文件
JSON進階
序列化
1 |
# 使用class對象的__dict__方法 |
反序列化
1 |
def dict2student(d): |
python中的序列化和反序列化
Python提供兩個模塊來實現序列化:cPickle和pickle。這兩個模塊功能是一樣的,區別在於cPickle是C語言寫的,速度快,pickle是純Python寫的,速度慢。
- 變量從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling
- 變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling
1 |
try: |
1.將內存對象存取到磁盤
1 |
a = dict(a=1, b=2, c=3) |
1 |
a = dict(a=1, b=2, c=3) |
2.從磁盤讀取到內存對象
1 |
pickle.load(open('a.txt', 'rb')) #從file-like Object中直接反序列化出對象 |