从 sns 发布到 https 端点的格式化消息

问题描述

我正在向 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 对象中。