初级
消息序列化与反序列化
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
def solve():
from pyodide.http import open_url
from io import StringIO
messages_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_05/messages.csv").read()
import pandas as pd, json, hashlib
from io import StringIO
msgs = pd.read_csv(StringIO(messages_csv))
def serialize(topic, payload, msg_id=None):
import secrets
msg = {'id': msg_id or secrets.token_hex(4), 'topic': topic,
'payload': payload, 'checksum': ''}
raw = json.dumps({'id':msg['id'],'topic':topic,'payload':payload}, sort_keys=True)
msg['checksum'] = hashlib.md5(raw.encode()).hexdigest()[:8]
return json.dumps(msg)
def deserialize(raw_str, verify=True):
msg = json.loads(raw_str)
if verify:
check_raw = json.dumps({'id':msg['id'],'topic':msg['topic'],'payload':msg['payload']}, sort_keys=True)
expected = hashlib.md5(check_raw.encode()).hexdigest()[:8]
if expected != msg.get('checksum'):
raise ValueError('checksum mismatch')
return msg
payload = {'order_no':'ORD001','user_id':1,'amount':299.0}
raw = serialize('order.created', payload)
msg = deserialize(raw)
print(f"serialized len: {len(raw)}")
print(f"topic: {msg['topic']}, checksum_ok: True")
print(f"统计: total={len(msgs)}, consumed={len(msgs[msgs['status']=='consumed'])}, failed={len(msgs[msgs['status']=='failed'])}")
示例
输入
solve()
期望输出
serialized len: 134 topic: order.created, checksum_ok: True 统计: total=30, consumed=5, failed=10
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199