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

如何使用AWS Lambda将S3存储桶中的JSON文件转换为CSV格式

基于现有代码修改后的JSON转CSV Lambda实现

以下代码默认你存放在S3的JSON文件为对象数组结构,如果是单JSON对象需要单独调整

import json
import csv
import boto3
import os
import datetime as dt

s3 = boto3.client('s3')

def lambda_handler(event, context):
    
    datestamp = dt.datetime.now().strftime("%Y/%m/%d")
    timestamp = dt.datetime.now().strftime("%s")
    
    filename_csv = f"/tmp/file_{timestamp}.csv"
    # 输出路径改为CSV后缀
    keyname_s3 = f"uploads/output/{datestamp}/{timestamp}.csv"
    
    for record in event['Records']:
        bucket_name = record['s3']['bucket']['name']
        key_name = record['s3']['object']['key']
        
    # 从S3读取JSON文件并解析
    s3_object = s3.get_object(Bucket=bucket_name, Key=key_name)
    data = s3_object['Body'].read()
    json_data = json.loads(data.decode('utf-8'))
    
    # 解析JSON生成CSV
    if json_data:
        # 取第一个JSON对象的所有键作为CSV表头
        headers = list(json_data[0].keys())
        with open(filename_csv, 'w', newline='', encoding='utf-8') as csv_file:
            writer = csv.DictWriter(csv_file, fieldnames=headers)
            # 写入表头
            writer.writeheader()
            # 批量写入所有行数据
            writer.writerows(json_data)
    
    # 上传转换后的CSV到S3
    with open(filename_csv, 'r') as csv_file_contents:
        s3.put_object(Bucket=bucket_name, Key=keyname_s3, Body=csv_file_contents.read())

    # 清理临时文件
    os.remove(filename_csv)

    return {
        'statusCode': 200,
        'body': json.dumps(f'JSON converted to CSV and available at: {bucket_name}/{keyname_s3}')
    }
核心修改点
  • 翻转了转换逻辑:先读取S3的JSON内容反序列化为Python列表,再通过csv.DictWriter写入CSV文件
  • 调整了输出S3对象的后缀为.csv,匹配转换后的文件格式
  • 去掉了冗余的临时文件写入逻辑,减少IO操作
  • 增加了表头自动提取逻辑,默认取第一个JSON对象的键作为CSV列名
注意事项
  • 如果你的JSON文件是嵌套结构,需要提前把嵌套字段扁平化再写入CSV,否则会直接写入对象字符串
  • 触发Lambda的S3事件前缀不要和输出路径重叠,避免循环触发
  • 如果JSON文件体积超过Lambda临时目录(/tmp)512MB限制,需要调整为流式读写逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:07