JSON编码错误使用boto3发布sns消息

g_g*_*llz 5 json amazon-web-services amazon-sns python-3.x boto3

我试图将简单的JSON消息发送到boto3中的sns主题.但是,我在邮件的标记中不断收到_jsonparsefailure,我只收到默认值.这是我的代码:

    mess = {'default': 'default', 'this': 'that'}
    jmess = json.JSONEncoder().encode(mess)

    response = self.boto_client.publish(
        TopicArn=self.TopicArn,
        MessageStructure='json',
        Message=jmess
    )
Run Code Online (Sandbox Code Playgroud)

我也试过json.dumps(),它产生相同的结果.

    mess = {'default': 'default', 'this': 'that'}
    jmess = json.dumps(mess)

    response = self.boto_client.publish(
        TopicArn=self.TopicArn,
        MessageStructure='json',
        Message=jmess
    )
Run Code Online (Sandbox Code Playgroud)

我似乎遵循文档设置的所有准则,并且在运行脚本时我没有得到异常.有SQS队列订阅主题,我直接从控制台提取结果数据.

g_g*_*llz 6

好的,我解决了.结果消息需要如下所示:

json.dumps({"default": "my default", "sqs": json.dumps({"this": "that"})})
Run Code Online (Sandbox Code Playgroud)

亚马逊在这方面有可怕的文件.希望这有助于下一个人.

编辑

如果将sqs队列设置为仅接收原始消息,也可以删除MessageStructure='json'和发送json.dumps({'this':'that'}).这只需通过控制台完成.


Rag*_*tra 5

这是我修复它的方式:

message = {"record_id": "my_id", "name": "value"}
json_message = json.dumps({"default":json.dumps(message)})
sns_client.publish("topic_arn",Subject="test",MessageStructure="json",Message=json_message)
Run Code Online (Sandbox Code Playgroud)

SNS期望"默认"作为包含要发布的消息的密钥.