Python序列化详解:json与pickle模块对比及用法
本文深入解析Python中json与pickle两大序列化模块。json用于字符串与通用数据类型转换,支持跨语言数据交换;pickle专用于Python特有类型及全数据类型序列化,仅限Python环境。通过对比dumps、loads、dump、load四个核心功能及文件读写模式(文本vs二进制),明确两者在数据类型支持、语言兼容性及使用场景上的关键差异,帮助开发者根据需求选择合适的序列化方案。
在Python中,有两个常用的模块用于实现数据序列化:
• json:该模块主要用于在字符串与Python基础数据类型之间进行相互转换。
• pickle:该模块则专注于Python特有的数据类型与标准Python数据类型之间的转换。
Json 模块提供了四个核心功能:dumps、dump、loads、load。
pickle 模块同样提供了四个功能:dumps、dump、loads、load。
import pickle
data = {'k1':123, 'k2':888}
#dumps可以将数据类型转换成只有python才认识的字符串
p_str = pickle.dumps(data)
print p_str
输出结果:
(dp0
S'k2'
p1
I888
sS'k1'
p2
I123
s.
将数据转换为仅Python可识别的字符串格式,并将其写入文件:
import pickle
data = {'k1':123, 'k2':888}
#打开文件,然后将data写入
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
#同样读取的时候也需要打开文件
with open('data.pkl', 'rb') as f:
data_1 = pickle.load(f)
print data_1
结果:
{'k2': 888, 'k1': 123}
文件中显示的内容与上面一致
json的使用方式与pickle类似,但存在关键区别。
import json
data = {'k1':123, 'k2':888}
p_str = json.dumps(data)
print p_str, type(p_str)
结果:
{"k2": 123, "k1": 888} <type 'str'>
虽然输出结果看起来像字典,但需注意,这实际上是一个字符串。因为json数据必须以字符串格式存储,它只是视觉上类似于字典结构。
import json
data = {'k1':123, 'k2':123}
#打开文件,然后将data写入
with open('data.pkl', 'w') as f:
json.dump(data, f)
#同样读取的时候也需要打开文件
with open('data.pkl', 'r') as f:
data_1 = json.load(f)
print(data_1, type(data_1))
结果:
({u'k2': 123, u'k1': 123}, <type 'dict'>)
读取文件后,数据可以正确还原,且类型保持正确。
那么,pickle和json的主要区别在哪里?
在上面的代码示例中,pickle在写入和读取文件时使用了‘b'(二进制)模式,而json则没有使用二进制模式。
json支持在不同编程语言之间交换数据,而pickle仅在Python内部使用。
json只能序列化最基本的数据类型,而pickle可以序列化所有数据类型,包括自定义类、函数等。
以上关于Python中json与pickle的简要介绍到此结束,希望能为读者提供参考,并欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









