问题描述
我正在向 sns_topic 发布消息并起诉 boto3。 我使用 https 端点作为协议。接收到端点的输出消息包含在“/”中。我尝试通过这样做来逃避这种情况
def sns_publish(message,sns_event):
try:
topic_arn = get_topic_arn(sns_event)
customer_id = str(message['customer_id'])
message = json.dumps({"default":json.dumps(message)})
sns_client.publish(TopicArn=topic_arn,Message=message,MessageStructure='json',MessageAttributes={
'customer_id': {
'DataType': 'String','StringValue': customer_id
}})
except Exception as e:
logging.exception("SNSPublishError: {}".format(e))
接收到 https 端点的输出如下:
"Message": "{\"id\": \"WT3375104\",\"bill_to_nbr_x\": \"7159\",\"file_nbr_x\": \"3375104\"}"
我遵循了 boto3 文档并在代码中提供了 Message 和 MessageStructure 属性,如上所示,如何从 JSON 输出中删除那些“/”
解决方法
以这种格式呈现发送的数据是 aws 的功能,因此使用 json 模块解析它:
import json
mess = {"Message": "{\"id\": \"WT3375104\",\"bill_to_nbr_x\": \"7159\",\"file_nbr_x\": \"3375104\"}"}
print(json.loads(mess['Message']))
,
您是否尝试过使用 raw message delivery?这应该会导致消息看起来不像 SNS 消息,这意味着该消息不需要转义,因为它没有包含在另一个 JSON 对象中。