【问题标题】:In lambda using node.js how can I parse the data from a kinesis stream在使用 node.js 的 lambda 中,我如何解析 kinesis 流中的数据
【发布时间】:2016-06-15 03:05:33
【问题描述】:

我设置了以下 lambda 函数,并将 kinesis 作为其事件源。数据以流的形式传入,在这里我将其解析为字符串,例如{id=2, sourceIp=220.220.1.220 }。我想将其转换为 node.js 中的对象。我该怎么做?

exports.handler = (event, context) => {

    event.Records.forEach(function(record) {
        var data = new Buffer(record.kinesis.data, 'base64').toString('ascii');
        console.log('data: ', data)
    });
};

【问题讨论】:

  • 您是否应该在那里记录data 而不是buffer

标签: javascript node.js buffer aws-lambda amazon-kinesis


【解决方案1】:

我想你想做的是这样的:

var data = JSON.parse(new Buffer(record.kinesis.data, 'base64'));

【讨论】:

    【解决方案2】:

    我不熟悉 Kinesis 的实际输出,但我对您给出的示例感到有些困惑。即使在 lambda 中的测试示例 test 也显示 Kinesis 对象看起来像这样

    "kinesis": {
        "partitionKey": "partitionKey-3",
        "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0IDEyMy4=",
        "kinesisSchemaVersion": "1.0",
        "sequenceNumber": "49545115243490985018280067714973144582180062593244200961"
    }
    

    这意味着解析后的字符串应该类似于您的示例中的"id=2,sourceIp=220.220.1.220"。如果是这种情况,您可以做一些像这样复杂的事情来将数据放入适当的对象中。

    var json = {};
    data.split(',').map(function(each){
        return each.split('=');
    }).forEach(function(pair){
        json[pair[0]] = pair[1];
    });
    

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多