我将以下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)
});
};
答案 0 :(得分:1)
我不熟悉Kinesis的实际输出,但我对你给出的例子感到有些困惑。即使在lambda中测试示例测试也显示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];
});
答案 1 :(得分:1)
我认为你想要做的是:
var data = JSON.parse(new Buffer(record.kinesis.data, 'base64'));