Python对象序列化方法_pickle与json说明【指导】
发布时间 - 2025-12-31 00:00:00 点击率:次Python序列化选pickle或json取决于场景:pickle支持任意Python对象但不安全、不可跨语言;json安全、跨语言但仅支持基础类型。内部临时存储用pickle,外部交互用json。
Python中序列化对象主要有 pickle 和 json 两种方式,它们用途不同、限制不同、安全性也不同。选错方法可能导致数据无法还原、程序崩溃,甚至被恶意利用。
pickle:Python专属的二进制序列化
pickle 是 Python 原生支持的序列化模块,能保存几乎任意 Python 对象(函数、类实例、嵌套结构等),但只适用于 Python 环境内部使用。
- 生成的是二进制数据(也可用文本协议,但默认不推荐),不能直接阅读或跨语言交换
- 反序列化时会执行任意代码(如构造器、
__setstate__),绝不能加载不可信来源的 pickle 数据 - 不同 Python 版本间兼容性有限,高版本 pickle 的数据可能无法被低版本读取
- 常用方法:
pickle.dump(obj, file)、pickle.load(file)、pickle.dumps(obj)、pickle.loads(bytes)
json:轻量、安全、跨语言的文本序列化
json 模块将数据转为标准 JSON 格式(纯文本),天然支持 Web 交互和多语言协作,但只支持基础数据类型。
- 仅支持
dict、list、str、int、float、bool、None这几种类型;自定义类、函数、datetime、bytes 等需手动转换 - 天生安全:反序列化不会执行代码,适合处理外部输入(如 API 返回、用户上传)
- 生成结果人类可读,便于调试和日志记录
- 常用方法:
json.dump(obj, file)、json.load(file)、json.dumps(obj)、json.loads(str)
怎么选?看场景和数据类型
如果只是临时保存 Python 内部状态(如缓存、进程间传递),且完全控制数据来源,用 pickle 更省事;如果要存配置、传 API、写日志、或与前端/其他语言交互,必须用 json。
- 想保存一个
datetime?json默认不支持,得先转成字符串(如dt.isoformat()),读取时再解析 - 想保存一个带方法的类实例?
json不行,pickle可以,但要注意版本和安全性 - 从网页表单接收 JSON 数据?只能用
json.loads(),用pickle.loads()会报错甚至引发漏洞
小技巧:让 json 支持更多类型
通过 default 参数和自定义 JSONEncoder,可以让 json 处理常见扩展类型。
- 例如把
datetime自动转为 ISO 字符串:json.dumps(obj, default=str)(简单粗暴,适用多数情况) - 更精确的做法是继承
json.JSONEncoder,重写default方法,对不同类型做针对性处理 - 反序列化时没有内置机制,需在业务逻辑里手动识别字段并转换(如检测
"created_at"字段后调用datetime.fromisoformat())
# python
# js
# 前端
# json
# 多语言
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
再谈Python中的字符串与字符编码(推荐)
如何用搬瓦工VPS快速搭建个人网站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何续费美橙建站之星域名及服务?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
如何快速生成可下载的建站源码工具?
Swift中swift中的switch 语句
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Linux网络带宽限制_tc配置实践解析【教程】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
JavaScript如何操作视频_媒体API怎么控制播放
香港服务器选型指南:免备案配置与高效建站方案解析
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
微信小程序 闭包写法详细介绍
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何配置Horizon来管理队列?(安装和使用)
Android利用动画实现背景逐渐变暗
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
网站制作壁纸教程视频,电脑壁纸网站?
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Laravel怎么为数据库表字段添加索引以优化查询
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
简单实现Android验证码
bootstrap日历插件datetimepicker使用方法
Laravel如何集成Inertia.js与Vue/React?(安装配置)
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
历史网站制作软件,华为如何找回被删除的网站?
个人网站制作流程图片大全,个人网站如何注销?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Android okhttputils现在进度显示实例代码
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
JS碰撞运动实现方法详解
html如何与html链接_实现多个HTML页面互相链接【互相】
制作电商网页,电商供应链怎么做?
如何注册花生壳免费域名并搭建个人网站?
如何在云虚拟主机上快速搭建个人网站?
上一篇:tp5下载没有thinkphp
上一篇:tp5下载没有thinkphp


son取决于场景:pickle支持任意Python对象但不安全、不可跨语言;json安全、跨语言但仅支持基础类型。内部临时存储用pickle,外部交互用json。