python3 pickle.dumps()数据转码保存到数据库或文件

本文可解决问题

  • pickle.dumps()转换的bytes数据如何转换为json的value
  • pickle.loads() 如何处理bytes字符串
  • json如何添加bytes的value
  • bytes数据如何保存到数据库的varchar字段中

基本知识

  • json: 数据格式:只能转换基本数据类型,无法转换类对象等
  • pickle: 数据格式: 可以相互转换类对象等复杂数据类型
  • python3: bytes和str很大的不同,显式转换相当于

过程

a=None a是一个对象
b=pickle.dumps(a) 把对象a转换为bytes类型
print(b) 返回 b’\x80\x03N.’
j={“xxx”: “xxx”, “a”: b} 构建字典,作为context,会保存到数据库
ctx_str = json.JSONEncoder().encode(j) 这里会报错,json不能有bytes类型
解决方法,把bytes转换为bytes字符串
j={“xxx”: “xxx”, “a”: str(b)}
此时 ctx_str = json.JSONEncoder().encode(j) 便会成功
ctx_str = json.dumps(ctx_str) 转换为json字符串 就可以作为数据表字段插入库了

反向转换
ctx_str = json.loads(ctx_str) 把json字符串转换为json
c=j[‘a’] 获得bytes字符串"b’\x80\x03N.’"
c=eval© 获得bytes格式,这里是关键,因为str(b)这里相当于是获得了bytes字符串,并不是把bytes转码为str(因为pickle.dumps的bytes是无法用decode转换的,decode仅用于bytes与字符串的转换,不能用于bytes与类对象的转换)
d=pickle.loads© 这样就把d转回对象None了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值