如何正确接收 Pubsub JSON 数据?

     2023-02-16     112

关键词:

【中文标题】如何正确接收 Pubsub JSON 数据?【英文标题】:How to correctly receive Pubsub JSON data? 【发布时间】: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)

我确信有更好的解决方案,但这对我有用。

【问题讨论】:

【参考方案1】:

您正在将有效负载作为字符串加载并检查它是否等于字典。

以这种方式加载您的消息

payload = json.loads(base64.b64decode(event['data']).decode('utf-8'))

json.loads 转换字典中的字符串,如果它是一个有效的字典。

【讨论】:

感谢您的回复。但我现在收到以下错误“在 raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 15 (char 14)" 编辑您的问题并打印事件内容['data']

如何将 JSON 数据发布到 PubSub,然后推送到 BigQuery?

】如何将JSON数据发布到PubSub,然后推送到BigQuery?【英文标题】:HowtopublishJSONdataintoPubSubandthenpushtoBigQuery?【发布时间】:2021-07-1912:12:17【问题描述】:我正在获取JSON格式的twitter数据,并且我想将该数据(相同的JSON格式)推送... 查看详情

如何在 Pubsub 上正确使用 nack?

】如何在Pubsub上正确使用nack?【英文标题】:HowtousenackonPubsubproperly?【发布时间】:2021-11-0107:52:18【问题描述】:我正在从Pubsub中的某个主题收集消息。主要思想是,对于我收到的每条消息都做一些逻辑(在数据库中插入一些东... 查看详情

具有 CustomAttributes 的 PubSub - 未调用接收器函数,但出现 json 解析异常

】具有CustomAttributes的PubSub-未调用接收器函数,但出现json解析异常【英文标题】:PubSubwithCustomAttributes-Receiverfunctionisnotinvokedbutajsonparseexceptioniscomingup【发布时间】:2021-01-0304:36:55【问题描述】:GoogleCloud和PubSub服务。我在下面的... 查看详情

微服务和 PubSub:如何确保服务使用正确的事件

】微服务和PubSub:如何确保服务使用正确的事件【英文标题】:MicroservicesandPubSub:howtomakesureaserviceconsumestherightevents【发布时间】:2021-06-2508:13:42【问题描述】:我有一个应用程序的微服务架构。我有一个服务S1可以获取数据并将... 查看详情

如何在 pubsub 节点上发送/接收自定义项目有效负载

】如何在pubsub节点上发送/接收自定义项目有效负载【英文标题】:Howtosend/receivecustomizeitempayloadonpubsubnode【发布时间】:2013-11-2511:03:43【问题描述】:如何使用有效负载在pubsub节点上发送/接收自定义项目,我使用的是qsmacklib。这... 查看详情

如何将 pubsub 日志接收器创建到不同的谷歌云项目/组织?

】如何将pubsub日志接收器创建到不同的谷歌云项目/组织?【英文标题】:HowcanIcreateapubsublogsinktoadifferentgooglecloudproject/org?【发布时间】:2018-06-1413:38:57【问题描述】:我想定义从一个项目到另一个项目的pubsub日志导出接收器的步... 查看详情

如何编写云函数来接收、解析和发布 PubSub 消息?

】如何编写云函数来接收、解析和发布PubSub消息?【英文标题】:HowdoIwriteaCloudFunctiontoreceive,parse,andpublishPubSubmessages?【发布时间】:2019-05-3018:28:24【问题描述】:这可以被视为thisthread的后续行动,但我需要更多帮助来推动事情... 查看详情

Google 表格未从 Woocommerce Webhook 正确接收 json 数据

】Google表格未从WoocommerceWebhook正确接收json数据【英文标题】:GoogleSheetsnotreceivingjsondataproperlyfromWoocommerceWebhook【发布时间】:2021-08-2623:35:07【问题描述】:希望你们今天过得愉快。我在我的woocommerce中设置了一个webhook,用于将JSO... 查看详情

JSON 数据作为 PubSub 的消息

】JSON数据作为PubSub的消息【英文标题】:JSONdataasmessageforPubSub【发布时间】:2021-01-2309:36:30【问题描述】:我根据谷歌“将消息发布到主题”指南编写了以下代码:import("context""fmt""io""cloud.google.com/go/pubsub")funcpublishMessage(wio.Writer,... 查看详情

Swift 中的复杂 JSON。如何正确获取数据。不同的结构

】Swift中的复杂JSON。如何正确获取数据。不同的结构【英文标题】:ComplexJSONinSwift.Howtogetthedatacorrectly.Differentstructures【发布时间】:2021-11-0509:12:04【问题描述】:遇到一个难题,接收数据时不知道如何将数据分解成一个数组。负... 查看详情

数据流:从 Pubsub RuntimeException 导出到 Bigquery

...b传递到bigquery。但是它工作了一秒钟,这意味着一些条目正确地通过了bigquery 查看详情

后端如何接受json对象数据如何设置表头

参考技术A一般情况下,后端接收JSON对象数据应该设置表头为:Content-Type:application/json这样,后端就能够正确识别请求携带的JSON对象,并能正确解析其中的数据。 查看详情

Pubsub API Explorer:返回的消息数据不正确

】PubsubAPIExplorer:返回的消息数据不正确【英文标题】:PubsubAPIExplorer:Incorrectmessagedatareturned【发布时间】:2019-01-2911:46:27【问题描述】:我正在学习PubSubAPI。我向主题发布了几条消息,当我使用APIExplorer进行订阅者拉动时Method:pro... 查看详情

将数据表转换为 JSON 并逐行发布到 PubSub

】将数据表转换为JSON并逐行发布到PubSub【英文标题】:ConvertdatatabletoJSONandpublishtoPubSubrowbyrow【发布时间】:2020-03-0820:02:50【问题描述】:我的流程是从SQLServer数据库中获取数据(我正在使用数据表),然后将其发布到PubSub(每... 查看详情

如何正确返回一个函数以使用 JSON 进行措辞?

】如何正确返回一个函数以使用JSON进行措辞?【英文标题】:HowcanIreturncorrectlyafunctionforaphrasingwithJSON?【发布时间】:2018-10-2116:28:36【问题描述】:最近我用CityBikes的API启动了一个项目,可以实时获取全球不同城市的共享单车站... 查看详情

我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?

...oogleCloudDataflow将来自多个Pubsub(源)的数据写入多个GCS(接收器)吗?【英文标题】:CanwewritedatafrommultiplePubsub(source)tomultipleGCS(sink)usingasingleGoogleCloudDataflow?【发布时间】:2020-12-2722:48:15【问题描述】:我有3个不同的Pubsub(源)... 查看详情

如何以json格式显示数据?

】如何以json格式显示数据?【英文标题】:howtodisplaydatainjsonformat?【发布时间】:2017-08-2903:58:49【问题描述】:嘿,实际上我是node和angularjs的新手,我正在node和angularjs上做一个项目json格式的数据,但该数据不是正确的json格式... 查看详情

如何在 WebAPI 后端 C# 上接收 JSON 数据?

】如何在WebAPI后端C#上接收JSON数据?【英文标题】:HowtoreceiveJSONdataonWebAPIbackendC#?【发布时间】:2015-09-1010:13:35【问题描述】:如何在C#中的WebAPI后端接收JSON数据?我的JavaScript前端发送了以下JSON。"User_Id":1,"TotalPrice":35,"DeliveryAddr... 查看详情