我有一个Big Query预定查询,可通过pub / sub触发云功能。
我希望函数从发布/订阅消息中读取“状态”值,以便可以查看它是否成功完成。
以下内容将始终触发else语句。如果删除了if语句,它将返回KeyError。
import base64
def hello_pubsub(event, context):
data = base64.b64decode(event['data']).decode('utf-8')
if 'state' in data:
state = data['state']
print("returned state: " + state)
else:
print ("No state attribute found")
这是函数应接收的pubsub消息:
{
"data":
{"dataSourceId": "scheduled_query",
"destinationDatasetId": "xxxxxxxxxx",
"emailPreferences": { },
"endTime": "2020-03-12T20:40:13.627285Z",
"errorStatus": { },
"name": "xxxxxxxxxx", "notificationPubsubTopic": "projects/xxxxxxxxxx/topics/xxxxxxxxxx",
"params": { "destination_table_name_template": "xxxxxxxxxx", "query": "xxxxxxxxxx", "write_disposition": "WRITE_TRUNCATE" },
"runTime": "2020-03-05T10:00:00Z",
"scheduleTime": "2020-03-12T20:37:13.17166Z",
"startTime": "2020-03-12T20:37:13.328479Z",
"state": "SUCCEEDED",
"updateTime": "2020-03-12T20:40:13.627307Z",
"userId": "xxxxxxxxxx"
}
}
问题来源:stackoverflow
我已经知道了。
data = base64.b64decode(event['data']).decode('utf-8')
这将返回json格式的字符串,而不是字典对象。您需要通过以下方式将其转换为dict:
data_dict = json.loads(data)
为了能够像字典一样访问它。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。