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

如何使用boto3在AWS中将CSV转换为JSON?附代码求助

在AWS中用boto3将CSV转换为JSON的正确方法

我来帮你一步步解决这个问题~先看看你现有代码里的问题,再给你一个能正常运行的版本。

你的代码存在的问题

  • Bucket参数类型错误:s3_client.get_object()的Bucket参数需要传入字符串格式的桶名,但你传的是s3.Bucket('bucket_name')这个对象,会直接触发参数错误。
  • CSV解析逻辑错误:你直接遍历文本的每个字符([ row for row in text ]),这会把每个字符当成独立元素,完全没有解析CSV的行和列结构。
  • JSON序列化错误:你把字符列表嵌套后转JSON,输出的内容并不是CSV对应的结构化数据,不符合转换需求。

正确的实现代码

下面分两种常见场景给出代码,你可以根据自己的CSV结构选择:

场景1:CSV包含表头(转成字典格式的JSON数组)

这是最常用的场景,CSV第一行是字段名,后续每行转成以字段名为键的字典:

import boto3
import csv
import json
from io import StringIO

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    # 替换成你的桶名和CSV文件键
    bucket_name = 'bucket_name'
    csv_key = 'Untitled1.csv'
    
    # 1. 从S3获取CSV文件
    response = s3_client.get_object(Bucket=bucket_name, Key=csv_key)
    csv_content = response["Body"].read().decode("utf-8")
    
    # 2. 用StringIO将文本转为类文件对象,方便csv模块读取
    csv_file = StringIO(csv_content)
    
    # 3. 用DictReader解析CSV,自动用表头作为字典的键
    csv_reader = csv.DictReader(csv_file)
    # 转换为JSON格式,indent=2用于格式化输出
    json_output = json.dumps(list(csv_reader), indent=2)
    
    print("转换后的JSON内容:")
    print(json_output)
    
    # 可选:将转换后的JSON存回S3
    # s3_client.put_object(
    #     Bucket=bucket_name,
    #     Key='converted_output.json',
    #     Body=json_output,
    #     ContentType='application/json'
    # )
    
    return json_output

场景2:CSV无表头(转成列表格式的JSON数组)

如果你的CSV没有表头,每行直接转成列表元素:

import boto3
import csv
import json
from io import StringIO

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    bucket_name = 'bucket_name'
    csv_key = 'Untitled1.csv'
    
    response = s3_client.get_object(Bucket=bucket_name, Key=csv_key)
    csv_content = response["Body"].read().decode("utf-8")
    
    csv_file = StringIO(csv_content)
    csv_reader = csv.reader(csv_file)
    
    json_output = json.dumps(list(csv_reader), indent=2)
    
    print("转换后的JSON内容:")
    print(json_output)
    
    return json_output

关键知识点说明

  • 使用StringIO的原因:csv模块的阅读器需要类文件对象作为输入,直接用字符串无法处理,StringIO可以把字符串包装成类文件对象,避免创建临时文件。
  • csv.DictReader的作用:自动识别CSV第一行作为表头,把后续每行数据映射为字典,让JSON结构更清晰易读。
  • 权限注意:确保Lambda执行角色拥有S3的GetObject和(如果需要存回的话)PutObject权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:28