如何用Python Lambda迭代解析JSON并将数据保存到DynamoDB?
AWS Lambda 写入DynamoDB 代码优化方案(灵活处理JSON属性)
原代码硬编码了要写入DynamoDB的字段,每次增删JSON属性都要修改代码,下面是针对这个问题的优化方案,核心是动态迭代处理所有JSON字段,同时修复冗余代码、增加错误处理:
优化后完整代码
import json import boto3 from botocore.exceptions import ClientError dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('table1') def lambda_handler(event, context): try: # 直接获取解析后的请求体(如果是API Gateway原始事件,可改为json.loads(event.get('body', '{}'))) request_body = event.get('body-json', {}) # 初始化Item,加入固定字段webhook_ID item = { 'webhook_ID': context.aws_request_id } # 动态合并请求体中的所有字段,实现迭代式写入 item.update(request_body) # 写入DynamoDB table.put_item(Item=item) return { 'statusCode': 200, 'body': json.dumps('数据已接收并存储'), 'requestID': context.aws_request_id } except ClientError as e: # 捕获DynamoDB操作异常,返回错误信息 return { 'statusCode': 500, 'body': json.dumps(f'存储失败: {e.response["Error"]["Message"]}'), 'requestID': context.aws_request_id } except KeyError as e: # 可选:捕获请求体缺失关键字段的情况(若需保留必要字段校验可启用) return { 'statusCode': 400, 'body': json.dumps(f'请求参数缺失: {str(e)}'), 'requestID': context.aws_request_id }
关键优化点说明
- 移除冗余JSON操作:原代码中
json.dumps(event)再json.loads(readJson)完全多余,Lambda接收的event本身就是Python字典,直接访问即可。如果是API Gateway原始事件(body为字符串),可调整为request_body = json.loads(event.get('body', '{}'))。 - 动态迭代处理字段:用字典
update()方法,一次性将请求体中所有键值对合并到Item中,后续增删JSON属性无需修改代码,实现完全灵活扩展。 - 补充错误处理:添加
ClientError捕获DynamoDB写入异常(如权限不足、表不存在等),可选添加KeyError校验必要字段,避免Lambda静默失败,同时返回清晰的错误反馈。 - 规范响应格式:将原代码的
status改为标准statusCode,符合API Gateway响应格式要求。
内容的提问来源于stack exchange,提问作者Sobhit Sharma
相关产品推荐
相关产品推荐

