NodeJS 以CSV格式将AWS DynamoDB数据下载到Excel

4ioopgfo  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(130)

我想下载AWS DynamoDB数据到Excel,以便在本地处理数据。但是,我还没有以完美的CSV格式获得数据。
我所做的:我使用了一个Node.js应用程序,它运行在AWS Lambda服务中来连接DynamoDB数据库,另外,我还可以从DynamoDB中查询数据,然后将其转换为CSV格式,如下所述:

const AWS = require("aws-sdk");

AWS.config.update({ region: "us-east-1"})
const dynamo = new AWS.DynamoDB.DocumentClient({apiversion: "2012-08-10"});

exports.handler = async (event, context) => {
    
  let body;
  const headers = {
      "Content-Type": "text/csv",
      'Content-disposition': 'attachment; filename=testing.csv'
  };
  
 var params = {
     KeyConditionExpression: 'dataId = :id',
     ExpressionAttributeValues: {
         ':id': event.pathParameters.id,
     },
     TableName: "Table1",
 };
 body = await dynamo.query(params).promise();
        
 //-----------------------------------
 // convert json to csv
 const items = body.Items
 const replacer = (key, value) => value === null ? '' : value
 const header = Object.keys(items[0])
 let csv = [header.join(','), 
            ...items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','))
            ].join('\r\n')

body = JSON.stringify(csv);
  return {
     body,
     headers,
  };
};

上面的解决方案是可行的,但是输出并不完美;下面显示了一个示例(请注意,有三列:相对湿度、水温和气温):
“相对湿度、水温、气温\r\n26.123206154221034、21.716873058693757、23.859491598934557\r\n26.966163183232673、18.09642888420125、21.47952617547989\r\n33.79030978475366、18.995791668472204,17.451627574004128\r\n40.6641803491319,19.89060168145951,17.61247262137161”(英文)
但是,我希望输出如下所示:
相对湿度,水温,空气温度18.995791668472204、17.451627574004128、40.6641803491319、19.89060168145951、17.61247262137161、17.451627574004128、17.61247262137161、17.61247272004137161、17.612447272004137161、17.612447272004137161、17.612
我将感谢任何关于如何实现这一点的指南。注意,我已经尝试了this,但数据正在以json格式导出到S3。

ax6ht2ek

ax6ht2ek1#

let inputString =  `"relativeHumidity,waterTemperature,airTemperature\r\n26.123206154221034,21.716873058693757,23.859491598934557\r\n26.966163183232673,18.09642888420125,21.47952617547989\r\n33.79030978475366,18.995791668472204,17.451627574004128\r\n40.6641803491319,19.89060168145951,17.61247262137161"`;
let result = inputString.split("\n");
result.forEach( val => {
  console.log(val);
})

相关问题