Python序列化详解:json与pickle模块对比及用法

阿澈
阿澈
发布时间:2026-10-13 | 1人浏览过
原创

本文深入解析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的简要介绍到此结束,希望能为读者提供参考,并欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表