序列化和反序列化
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 数据