json&pickle 序列化

本文详细介绍了序列化和反序列化的概念,探讨了JSON和pickle在数据转换中的应用,包括它们如何在不同场景下将内存数据转换为字符串或从字符串还原数据,以及各自支持的数据类型特点。

把内存数据转换字符叫序列化
把字符转成内存数据类型反序列化

json,用于字符串 和 python数据类型间进行转换
dumps 和loads 匹配使用
dumps 只能转成字符串,loads只能从字符串转换成数据类型。只能保存在内存里。

import json

date = {
    'roles':[
        {'role': 'monster', 'type': 'pig', 'HP': '50'},
        {'role': 'hero', 'type': '关羽', 'HP': '80'}
    ]
}
l = {'a':1, 'b':2}

d = json.dumps(date)
d2 = json.loads(d)

dump 转成字符串并写入文件, load,读文件并转成数据类型

import json

date = {
    'roles':[
        {'role': 'monster', 'type': 'pig', 'HP': '50'},
        {'role': 'hero', 'type': '关羽', 'HP': '80'}
    ]
}
l = {'a':1, 'b':2}

with open('json.file', 'r+', encoding='UTF-8') as f:
    json.dump(date, f)  #写入文件
    json.dump(l,f)      #写入文件
    date = json.load(f) #读取文件

 

json.dumps

json.loads
1.把内存数据通过网络远程给其他人
2定义不同语言之前的交互规则,跨平台
  1.纯文本,坏处:不能共享复杂的数据类型
  2.xml坏处:占空间大
  3.json,简单,可读性好
  load 只能一次

pickle,用于python特有的类型 和 python的数据类型间进行转换
pickle.dumps pickle.loads 匹配使用

import pickle
d = {'name': 'zheng', 'age': 23}
l = [1,2,3,4,'rain']

a = pickle.dumps(d)
b = pickle.dumps(l)

pickle.loads(a)
pickle.loads(b)

pickle.dump pickle.load   匹配使用

 

l = [1,2,3,4,5]


f = open('pick.pkl', 'wb')
pickle.dump(l,f)



f = open('pick.pkl', rb')
pickle.load(f)

 

json支持的数据类型:
  str,int,tuple,list,dict
pickle支持的数据类型:
  支持python所有数据类型
  只能在python使用

转载于:https://www.cnblogs.com/zhengyiqun1992/p/10083903.html

在处理 JSONPickle 数据的反序列化时,首先需要明确 JSONPickle 是一种结合了 JSON 和 Pickle 特性的序列化库,它允许在 JSON 中存储更复杂的 Python 对象,如自定义类的实例。与标准的 `json` 和 `pickle` 模块相比,`jsonpickle` 提供了更广泛的序列化能力,尤其是在处理非基本数据类型时。 要使用 `jsonpickle` 对 JSONPickle 数据进行反序列化,可以按照以下步骤操作: 1. 安装 `jsonpickle` 库(如果尚未安装): ```bash pip install jsonpickle ``` 2. 使用 `jsonpickle.decode()` 方法对 JSONPickle 数据进行反序列化。该方法接收一个 JSON 字符串,并返回还原后的 Python 对象。 以下是一个完整的代码示例: ```python import jsonpickle # 假设有一个自定义类 class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person(name='{self.name}', age={self.age})" # 创建一个对象实例 person = Person("Alice", 30) # 序列化对象为 JSONPickle 格式 json_str = jsonpickle.encode(person) # 反序列化 JSONPickle 数据 decoded_person = jsonpickle.decode(json_str) # 输出反序列化后的对象 print(decoded_person) # 输出: Person(name='Alice', age=30) ``` 上述代码中,`jsonpickle.encode()` 将 `Person` 类的实例转换为 JSONPickle 字符串,而 `jsonpickle.decode()` 则用于从该字符串中恢复原始对象。这种方式非常适合在网络传输或持久化存储中处理复杂的 Python 对象结构。 需要注意的是,`jsonpickle` 在反序列化过程中会动态导入类定义。因此,确保在反序列化环境中可以访问到原始类的定义是成功还原对象的关键。此外,为了安全起见,在处理不受信任的数据时应格外小心,因为反序列化过程可能执行任意代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值