一、相同點
-
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中直接反序列化出對象 |
到此這篇關于關于 Python json
中load和loads區別的文章就介紹到這了,更多相關 Python json中load和loads區別內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/python960410445/p/14978742.html