使用SQS发送json并将其发布

时间:2019-01-27 06:03:13

标签: javascript node.js json string amazon-sqs

我正在将json对象/字符串(都尝试过)放入SQS队列中-我试图将其作为有效负载发布到lambda函数中,该函数在SQS中包含新项时触发。 / p>

我的问题是json出现在另一端,并在每个“我有json对象或字符串”中添加了额外的\(反斜杠)。

这是一个示例,说明我如何将另一部分json作为普通字符串(这是要求)添加到SQS:

"{\"properties\":{\"colorIconValue\":\"Other\",\"description\":\"According to media reports on Saturday, 26 January, 

当文本进入队列时看起来像这样:

{"properties": {"colorIconValue": "Other","description": "International media r

用于将json添加到队列中的代码来自AWS蓝图:

    console.log("plain text" + incident_report);
                         var params = {
                            MessageBody: incident_report,
                            QueueUrl: QUEUE_URL
                        };
                        //write to SQS
                        sqs.sendMessage(params, function(err,data){
                          if(err) {
                            console.log('error:',"Fail Send Message" + err);
                            context.done('error', "ERROR Put SQS");  // ERROR with message
                          }else{
                            //console.log('data:',data.MessageId);
                            context.done(null,'');  // SUCCESS 
                          }
                        });

我尝试将有效负载添加为JSON对象,并将其添加为JSON.stringfy(),但是得到的结果是相同的...以后无法在(http post)上发布。

2 个答案:

答案 0 :(得分:1)

对收到的SQS消息使用JSON.parse()。例如:

sqs.receiveMessage(params, function(err, data) {
  if (err) throw err;

  // Parse your data to received string to json
  const jsonObject = JSON.parse(data.Records[0].body);
});

这应该在jsonObject中保存一个与您想要的对象类似的对象。

答案 1 :(得分:0)

这是直接来自SQS docs的示例。

  

创建一个JSON对象,其中包含消息所需的参数,包括要将此消息发送到的队列的URL。在此示例中,该消息提供了小说畅销书列表中的一本书的详细信息,包括书名,作者和列表中的星期数。

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

// Create an SQS service object
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});

var params = {
  DelaySeconds: 10,
  MessageAttributes: {
    "Title": {
      DataType: "String",
      StringValue: "The Whistler"
    },
    "Author": {
      DataType: "String",
      StringValue: "John Grisham"
    },
    "WeeksOn": {
      DataType: "Number",
      StringValue: "6"
    }
  },
  MessageBody: "Information about current NY Times fiction bestseller for week of 12/11/2016.",
  QueueUrl: "SQS_QUEUE_URL"
};

sqs.sendMessage(params, function(err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data.MessageId);
  }
});