本文可解决问题
- 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了