代码之家  ›  专栏  ›  技术社区  ›  Putnik

如何在JavaScript SDK中解码来自Kinesis.GetRecords的数据?

  •  0
  • Putnik  · 技术社区  · 5 年前

    我正在尝试从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表格 data 应该是base64编码的,但这里有一些不同。那么我怎样才能从 数据 数组我明白了吗?

    请注意,浏览器中不是nodejs,而是javascript。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Putnik    5 年前

    解决方案,最好将其保存在文档中:

    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);
            }
        });
    }