json和pickle

博客介绍了序列化和反序列化的概念,序列化是将对象从内存变为可存储或传输的过程,反序列化则相反。还提到在Python中,json可与其他语言通用,pickle仅用于Python,能处理json无法序列化的函数和类,还介绍了pickle的相关方法及与base64联合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是序列化?
我们把对象(变量)包括整型字符串列表字典等等都叫对象,从内存中变成可存储或传输的过程称之为序列化,在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)
<class '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)
<class 'bytes'> #因为是byte类型 写入文件时候要'wb'

>>> ret = pickle.loads(data)
>>> print(ret)
<function test at 0x104220950> #反序列化后的函数方法,需要调用的话本身也要有这个函数
>>> 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值