侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day22 - 对象的序列化和反序列化

2026-4-24 / 0 评论 / 2 阅读

序列化和反序列化

JSON 概述

JSON(JavaScript Object Notation):跨语言跨平台的数据交换格式,已成为事实标准,取代了 XML。

类型对应关系:

JSON Python
object dict
array list / tuple
string str
number int / float
boolean bool
null None

json 模块

基本操作

import json

data = {
    'name': 'Alice',
    'age': 25,
    'scores': [92, 87, 95]
}

# 序列化为字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

# 反序列化
parsed = json.loads(json_str)
print(parsed['name'])  # Alice

文件读写

import json

data = {'name': 'Bob', 'age': 30}

# 写入 JSON 文件
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# 读取 JSON 文件
with open('data.json', 'r', encoding='utf-8') as f:
    loaded = json.load(f)
    print(loaded)

常用参数

json.dumps(obj, ensure_ascii=False)  # 不转义中文
json.dumps(obj, indent=2)            # 格式化缩进
json.dumps(obj, sort_keys=True)      # 键排序

pickle 模块

pickle:Python 专用序列化协议,性能更好,但只能被 Python 读取。

import pickle

data = {'name': 'Charlie', 'age': 28}

# 序列化
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# 反序列化
with open('data.pkl', 'rb') as f:
    loaded = pickle.load(f)

requests 调用网络 API

HTTP 请求获取 JSON 数据:

import requests

# GET 请求
resp = requests.get('https://api.example.com/data', params={'key': 'value'})
if resp.status_code == 200:
    data = resp.json()  # 直接解析为字典
    print(data)

注意:需要 pip install requests

pip 包管理

pip install 包名          # 安装
pip uninstall 包名        # 卸载
pip list                 # 列出已安装
pip install -U 包名       # 更新
pip config set global.index-url https://pypi.doubanio.com/simple  # 国内镜像

总结

  • json:跨语言通用格式,推荐优先使用
  • pickle:Python 专用,高效但不可跨语言
  • json.dump/load 文件操作,json.dumps/loads 字符串操作
  • requests 库用于调用 HTTP API 获取 JSON 数据