【发布时间】:2021-11-11 06:06:00
【问题描述】:
我有一个带有云功能的 GCP 管道设置,可以接收 PubSub 消息。问题是每次我向云函数发布消息(一个 json 字符串)时,收到的消息与预期的有所不同。以下是我的代码:
import base64
def myfunc(event, context):
#receive pusub data
if 'data' in event:
payload = base64.b64decode(event['data']).decode('utf-8')
else:
payload = 'No Data'
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}]}
#Compare the received payload from pubsub with the local payload
#I expect to the same payload as payloadlocal
if payloadLocal == payload:
print("Payload same")
else:
print("Payload different")
我使用 pubsub 发布的消息是:
{"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}]}
但是当我将 payloadlocal 与从 pubsub 消息接收到的有效负载进行比较时,它是不同的。我缺少一些愚蠢的东西。请任何人指出它。谢谢
编辑: 经过多次尝试,我找到了解决方案:
payload = base64.b64decode(event['data'])
dict_str = payload.decode("UTF-8")
payload = ast.literal_eval(dict_str)
我确信有更好的解决方案,但这对我有用。
【问题讨论】:
标签: python-3.x google-cloud-functions base64 google-cloud-pubsub