← 返回题库
初级

消息序列化与反序列化

未完成
初级参考 完整示例代码供参考,建议自己理解后重新输入
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
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码