You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS DynamoDB数据完美导出为适用于Excel的CSV格式

解决DynamoDB导出CSV格式异常问题

你的问题根源在于最后把生成好的CSV字符串又用JSON.stringify()处理了一遍,导致整个内容被包裹在引号里,换行符也被转义成\r\n的文本形式,而非实际的换行效果。

修复步骤

直接移除JSON.stringify()调用,把生成的CSV字符串直接赋值给body即可:

// 替换这行
// body = JSON.stringify(csv);
// 改成
body = 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",
  };
  const queryResult = await dynamo.query(params).promise();
        
  //-----------------------------------
  // convert json to csv
  const items = queryResult.Items;
  // 处理空结果,避免报错
  if (!items || items.length === 0) {
      body = "";
      return { body, headers };
  }
  
  const replacer = (key, value) => value === null ? '' : value;
  const header = Object.keys(items[0]);
  const csv = [
      header.join(','), 
      ...items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','))
  ].join('\r\n');

  body = csv;
  return {
     body,
     headers,
  };
};

额外说明

  • Lambda返回的body如果是字符串类型,且你已经设置了Content-Type: text/csv,无需再用JSON.stringify()处理,否则会把CSV转为JSON格式的字符串输出。
  • 新增空结果判断,避免查询不到数据时items[0]引发的报错。

批量导出替代方案

如果需要批量导出整张表的数据到CSV,不用自行维护Lambda代码的话,可以用Amazon Athena连接DynamoDB表,编写SQL查询后直接将结果导出为CSV格式到S3,效率更高且无需额外代码开发。

内容的提问来源于stack exchange,提问作者Hyacinth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:55:18