如何正确接收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
相关产品推荐
相关产品推荐

