json和pickle

什么是序列化?
我们把对象(变量)包括整型字符串列表字典等等都叫对象,从内存中变成可存储或传输的过程称之为序列化,在python中叫pickling,在其他语言中serialization、marshalling、flattening等等,都是一个意思,序列化之后的内容可以写入磁盘或者通过网络传输到别的机器上。
相反,把变量内容从序列化对象重新读到内存里称之为反序列化,python叫unpickling

  1. json 与其他语言通用
>>> dict={'name':'simon','age':1}
>>> import json
>>> dict = json.dumps(dict)
'{"name": "simon", "age": 1}' #序列化之后的数据
>>> dict  = json.loads(dict)
>>> print(dict)
{'name': 'simon', 'age': 1} #反序列化之后恢复回字典
>>> type(dict)

  1. pickle 因为json无法序列化函数和类,可以用此方法仅在python语言使用
    pickle.dumps() 将python数据序列化为bytes类型
    pickle.loads() 将bytes类型数据反序列化为python的数据类型
>>> import pickle
>>> def test():
...     print('ok')
... 
>>> data = pickle.dumps(test)
>>> print(data)
b'\x80\x03c__main__\ntest\nq\x00.' #序列化之后的函数
>>> type(data)
 #因为是byte类型 写入文件时候要'wb'>>> ret = pickle.loads(data)
>>> print(ret)
 #反序列化后的函数方法,需要调用的话本身也要有这个函数
>>> ret()
ok #执行函数后的结果
  1. base64与pickle联合使用
>>  str = 'Hello World'  # 加密前,原始数据
>>  a = base64.b64encode(pickle.dumps(str)).decode()  # 加密
>>  print(a)
>>  gANYCwAAAEhlbGxvIFdvcmxkcQAu
>>  b = pickle.loads(base64.b64decode(a.encode()))  # 解密
>>  print(b)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部