json和pickle模块
2021-05-29 11:01
标签:blank ref json模块 通过 实用 双引号 ble src 数据 把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。 序列化的优点: Json序列化并不是python独有的,json序列化在java等语言中也会涉及到,因此使用json序列化能够达到跨平台传输数据的目的。 json数据类型和python数据类型对应关系表 json模块序列化和反序列化的一个过程如下图所示 Pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,即不能成功地反序列化也没关系。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。 pickle模块序列化和反序列化的过程如下图所示 json和pickle模块 标签:blank ref json模块 通过 实用 双引号 ble src 数据 原文地址:https://www.cnblogs.com/bubu99/p/14742273.html一、json和pickle模块
1.1 序列化
1.2 json
Json类型
Python类型
{}
dict
[]
list
“string”
str
520.13
int或float
true/false
True/False
null
None
1
import json
1
2
struct_data = {‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘}
print(struct_data, type(struct_data))
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘} class ‘dict‘>
1
2
data = json.dumps(struct_data)
print(data, type(data))
1
{"name": "json", "age": 23, "sex": "male"} class ‘str‘>
1
2
3
# 注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
data = json.loads(data)
print(data, type(data))
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘} class ‘dict‘>
1
2
3
# 序列化
with open(‘Json序列化对象.json‘, ‘w‘) as fw:
json.dump(struct_data, fw)
1
2
3
4
# 反序列化
with open(‘Json序列化对象.json‘) as fr:
data = json.load(fr)
print(data)
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘}
1.3 pickle
1
import pickle
1
2
struct_data = {‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘}
print(struct_data, type(struct_data))
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘} class ‘dict‘>
1
2
data = pickle.dumps(struct_data)
print(data, type(data))
1
b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.‘ class ‘bytes‘>
1
2
data = pickle.loads(data)
print(data, type(data))
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘} class ‘dict‘>
1
2
3
# 序列化(注意:pickle模块需要使用二进制存储,即‘wb‘模式存储)
with open(‘Pickle序列化对象.pkl‘, ‘wb‘) as fw:
pickle.dump(struct_data, fw)
1
2
3
4
# 反序列化
with open(‘Pickle序列化对象.pkl‘, ‘rb‘) as fr:
pickle = pickle.load(fr)
print(data)
1
{‘name‘: ‘json‘, ‘age‘: 23, ‘sex‘: ‘male‘}