You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确接收PubSub JSON数据?GCP云函数接收消息不匹配求助

问题根本原因
  • 核心问题是类型不匹配:你从PubSub解码得到的payload是UTF-8格式的字符串类型,而本地定义的payloadLocal是Python原生字典类型,不同类型的变量直接做==判断必然返回False。
  • 次要潜在问题:就算你把payloadLocal转成字符串做对比,JSON字符串的缩进、换行、空格差异也会导致字符串对比结果不符合预期,不是可靠的对比方式。
更适配场景的优化方案

你自行摸索的方案通过把字符串转成字典解决了类型匹配问题,已经可以正常运行。针对你发布的是标准JSON格式消息的场景,更推荐用JSON模块做序列化处理,性能和安全性都更适配:

import base64
import json

def myfunc(event, context):
    # 接收PubSub数据并转成字典
    if 'data' in event:
        payload_str = base64.b64decode(event['data']).decode('utf-8')
        payload = json.loads(payload_str)
    else:
        payload = {}

    payloadLocal ={"considerIp":False,"wifiAccessPoints":[{"macAddress":"44:48:c1:a6:f3:d0","signalStrength":-54,"signalToNoiseRatio":0,"channel":11,"age":0},{"macAddress":"9c:1c:12:b0:45:f1","signalStrength":-43,"signalToNoiseRatio":0,"channel":11,"age":0},{"macAddress":"20:a6:cd:33:6c:f4","signalStrength":-32,"signalToNoiseRatio":0,"channel":11,"age":0}]}
    
    # 二者均为字典,结构内容一致就会判断相等
    if payloadLocal == payload:
        print("Payload same")
    else:
        print("Payload different")

内容的提问来源于stack exchange,提问作者codeheadache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:54:00