一、相同点
-
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