共计 1081 个字符,预计需要花费 3 分钟才能阅读完成。
序列化(Serialization)是将数据结构或对象转换为可以存储或传输格式的过程,而反序列化(Deserialization)则是将存储或传输的数据恢复成原始数据结构或对象的过程。在 Python 中,json 和 pickle 模块提供了两种常用的序列化和反序列化机制,它们各自有不同的用途和特点。
json 模块
适用于需要进行数据交换的场景,特别是在 Web 开发中常用于 API 数据交换(如 RESTful API)。如果需要将数据保存为人类可读格式,或者需要与其他编程语言进行交互,json 是更好的选择。
import json
data = {"name": "Alice", "age": 30, "city": "Beijing"}
json_data = json.dumps(data, indent=4) # 将 Python 对象转换为 JSON 字符串
print(json_data)
# 将 Python 对象转换为 JSON 字符串并写入文件
with open("data.json", "w") as f:
json.dump(data, f, indent=4)
dic = json.loads(json_data) # 将 JSON 字符串转换为 Python 对象
print(dic)
with open("data.json", "r") as f:
dic = json.load(f)
print(dic)
pickle 模块
pickle 模块专门用于将 Python 对象转换为字节流(序列化)并将其保存到磁盘,或者将字节流转换回 Python 对象(反序列化)。与 json 模块不同,pickle 能够处理 Python 中几乎所有对象,包括自定义类实例、函数等复杂对象。
import pickle
data = {"name": "Alice", "age": 30, "city": "Beijing"}
byte_data = pickle.dumps(data) # 将 Python 对象转换为字节流
print(byte_data)
with open("data.pkl", "wb") as f:
pickle.dump(data, f)
dic = pickle.loads(byte_data)
print(dic)
with open("data.pkl", "rb") as f:
dic = pickle.load(f)
print(dic)
总之,json 适合跨平台数据交换和保存,而 pickle 则在处理复杂对象时更为高效。在选择使用哪种模块时,应该根据具体需求而定。如果需要与其他编程语言进行交互,或者希望数据具有可读性,json 是更好选择;如果只在 Python 环境中操作复杂对象,pickle 更为合适。
正文完