Python json中load和loads區別
阿新 • • 發佈:2022-05-31
摘抄筆記
這篇文章主要介紹了關於 Python json中load和loads區別,文章也有簡單的說明它們之間的相同點,然後詳細介紹不同點,需要的朋友可以參考一下文章的具體內容 一、相同點-
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 2 |
a_dict = { 'a' : '1111' , 'b' : '2222' }
json.dump(a_dict, open ( 'demo.json' , 'w' )
|
dumps:將dict轉換為string
(易傳輸)
1 2 |
a_dict = { 'a' : '1111' , 'b' : '2222' }
a_str = json.dumps(a_dict)
|
總結:
根據序列化和反序列的特性
-
loads: 是將
string
轉換為dict
-
dumps: 是將
dict
轉換為string
-
load: 是將裡
json
格式字串轉化為dict
,讀取檔案 -
dump: 是將
dict
型別轉換為json
格式字串,存入檔案
三、JSON進階
1.序列化
1 2 3 4 5 6 7 8 9 |
# 使用class物件的__dict__方法
class Student( object ):
def __init__( self , name, age, score):
self .name = name
self .age = age
self .score = score
import json
s = Student( 'Bob' , 20 , 88 )
print (json.dumps(s, default = lambda obj: obj.__dict__))
|
2.反序列化
1 2 3 4 5 6 7 |
#Python學習交流群:531509025
def dict2student(d):
return Student(d[ 'name' ], d[ 'age' ], d[ 'score' ])
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print (json.loads(json_str, object_hook = dict2student))
|
四、python中的序列化和反序列化
Python
提供兩個模組來實現序列化:cPickle
和pickle
。這兩個模組功能是一樣的,區別在於cPickle
是C語言寫的,速度快,pickle
是純Python
寫的,速度慢。
- 變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在
Python
中叫pickling
- 變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即
unpickling
1 2 3 4 |
try :
import cPickle as pickle
except ImportError:
import pickle
|
1.將記憶體物件存取到磁碟
1 2 3 4 5 |
a = dict (a = 1 , b = 2 , c = 3 )
pickle.dumps(a) # 將物件序列化為str然後存入檔案
a = dict (a = 1 , b = 2 , c = 3 )
pickle.dump(a, open ( 'a.txt' , 'wb' )) # 使用dump直接把物件序列化為file-like Object,注意是二進位制儲存
|
2.從磁碟讀取到記憶體物件
1 |
pickle.load( open ( 'a.txt' , 'rb' )) #從file-like Object中直接反序列化出物件
|