Как декодировать данные из kinesis.getRecords в Javascript SDK?
Я пытаюсь получить данные из потока данных Kinesis:
function getRecord(shard_iterator) {
var getRecParams = {
ShardIterator: shard_iterator
};
kinesis.getRecords(getRecParams, function(err, result) {
// Loop through all the packages
for (var record in result.Records) {
console.log(JSON.stringify(result.Records[record].Data));
break; // just to see the first one
}
//if (result.NextShardIterator) getRecord(result.NextShardIterator);
});
}
Результат я вижу:
{"type":"Buffer","data":[123,34,73,110,112,117....,125]}
Форма AWS CLI я знаю data
должен быть закодирован в base64, но здесь есть кое-что другое. Так как я могу получить информацию от data
массив я вижу?
Пожалуйста, обратите внимание, что это не NodeJS, а Javascript в браузере.
2 ответа
Решение
Решение, было бы неплохо иметь его в док:
var decoder = new TextDecoder("utf-8");
function getRecord(shard_iterator) {
var getRecParams = {
ShardIterator: shard_iterator
};
kinesis.getRecords(getRecParams, function(err, result) {
if (err) {
console.log("Error in getRecords() from the Kinesis stream.");
console.log(err);
} else {
try {
// Loop through all the packages
for (var record in result.Records) {
data = result.Records[record].Data
decoded = JSON.parse(decoder.decode(data));
console.log(decoded);
}
} catch(err) {
console.log("Error parsing the package.");
console.log(err);
}
if (result.NextShardIterator) getRecord(result.NextShardIterator);
}
});
}
У меня была похожая проблема. В моем случае мне просто нужно было изменитьJSON.stringify(result.Records[record].Data)
кresult.Records[record].Data.toString()
Пониматьobj.toString()
противJSON.stringify(obj)
, вот ссылка: В чем разница в использовании toString() по сравнению с JSON.stringify()?