【问题标题】:Need to parse SQS message需要解析SQS消息
【发布时间】:2019-07-05 15:15:30
【问题描述】:

当我收到一条消息时,我在解析我的 AWS SQS 消息时遇到了一些问题。

我的主要问题是,虽然它看起来有点像字符串,但它也想像一个对象一样。

到目前为止,我一直在尝试解析消息,所以它有很多 console.log()typeof

sqs.receiveMessage(params, (err, data) => {
 if (err) console.log(err, err.stack); 
 else {
  messages = data; 
  console.log(typeof messages.Messages[2].Body); // #2
  let validMessage = JSON.parse(messages.Messages[2].Body); // #1
  console.log(`validMessage: ${validMessage}`); // Just doesn't print out
  console.log(typeof validMessage); // Errorr with #1 
  console.log(messages.Messages[2]); // gives #3 below
 }     
});

1:

SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)

2:

string

3:

{ MessageId: '2afe328d-0b23-4f21-82c5-47563cd994ef',
  ReceiptHandle: 
'AQEB4Giu1whgf6He9cJZVCNBzyfbIPPWlS5HOMLwsyC2lLODJbOudVIdLAx0R9U//XHP9CFr1xhycGzdFXPM1gkHRFf004G1AyqkuB1VPRd/RoQGDcJ9yiKw94b6L7i4VWqbCGdr0Dnz0IMw7ze+C69lE1+TD02L28crHscx+IuWdGKpFq79lOJjpbXfmYv4LP/m1fG3aWyRphKkgtFT/eOCpzqLbGn1Gq6h8RBxo7rexGW5SiNw9F/gVPVTpAWuJolOXv9duAzu8FF7rMnBl2bFjEbLirDtg1RwZtXdG64YsJF2pVwlWrAsx26W06GJocXI',
  `MD5OfBody: '1441a7909c087dbbe7ce59881b9df8b9',`
  `Body: '[object Object]' } `

我不确定我做错了什么,以及为什么它不能正常工作。消息的Body 中只有两个属性,即电子邮件和令牌。我想访问两者。

至于预期的结果,我希望能够通过 console.log(messages.Messages[i].Body.email) 访问电子邮件,它应该等于 john.doe@example.com

【问题讨论】:

    标签: node.js amazon-web-services amazon-sqs


    【解决方案1】:

    为了重现您的情况,我做了以下操作:

    • 创建了一个 Amazon SQS 队列
    • 使用aws sqs send-message --queue-url ... --message-body foobar向队列发送消息
    • 通过代码检索到消息

    我是 Python 人而不是 Node,但总体思路应该是一样的:

    import boto3
    
    client=boto3.client('sqs',region_name='ap-southeast-2')
    
    response = client.receive_message(QueueUrl='https://sqs.ap-southeast-2.amazonaws.com/743112987576/stack')
    print (response)
    print (response['Messages'][0]['Body'])
    

    response 的格式为:

    {
        u'Messages': [
            {
                u'Body': 'foobar', 
                u'ReceiptHandle': '...', 
                u'MD5OfBody': '...', 
                u'MessageId': '...'
            }
        ], 
        'ResponseMetadata': {...}
    }
    

    最后的输出是foobar

    Node SDK 的处理方式可能略有不同,您可能需要将字符串转换为 JSON 对象。

    【讨论】:

    • 嗯......这只是复制类似于我所拥有的。问题是您将字符串放入 SQS 而不是我尝试使用的对象。如果您看上面,您会看到我已经将字符串转换为 JSON 的位置,因此该建议是静音的。
    • 如果发送到 SQS 的字符串是 JSON 的字符串版本,那么您可以使用函数将 JSON 字符串转换为实际对象。在 Python 中,命令是json.loads()。 Node 中可能有一个等价物。
    猜你喜欢
    • 2012-12-12
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2021-10-04
    • 2022-01-23
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多