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

AWS Lambda中API请求JSON参数验证失败问题求助

问题原因及解决方案

核心问题

你打印的event中body是JSON格式的字符串,并非Python字典。直接用eventJson['body']['STTN']访问会触发异常——因为字符串不支持字典式的键取值逻辑,所以代码进入except块返回验证失败。

正确验证步骤

  1. 解析JSON字符串为Python字典
    使用json.loads()方法将body字符串转换为字典,同时要捕获解析失败的异常(比如body为空、格式不合法)。
  2. 验证解析后的字典字段
    基于转换后的字典,检查目标字段是否存在、是否为有效值。

修正后的代码示例

import json

# 假设eventJson是你获取的event对象
try:
    # 将body字符串解析为Python字典
    body_dict = json.loads(eventJson['body'])
except json.JSONDecodeError:
    returnValidateConditional = False
    validationResponse['apiStatus'] = "failed"
    validationResponse['apiErrorCode'] = "2"
    validationResponse['apiDescription'] = "请求体格式非法,需为JSON格式"
    statusCode = 400
    return [returnValidateConditional, validationResponse, statusCode]

# 验证STTN字段
try:
    sttn = body_dict['STTN']
    # 可选:额外验证STTN是否为有效非空值
    if not sttn.strip():
        raise ValueError("STTN不能为空")
except (KeyError, ValueError):
    returnValidateConditional = False
    validationResponse['apiStatus'] = "failed"
    validationResponse['apiErrorCode'] = "1"
    validationResponse['apiDescription'] = "STTN是必填项或格式无效"
    statusCode = 415
    return [returnValidateConditional, validationResponse, statusCode]

# 验证Account字段
try:
    account = body_dict['Account']
    # 可选:额外验证Account是否为有效非空值
    if not account.strip():
        raise ValueError("Account不能为空")
except (KeyError, ValueError):
    returnValidateConditional = False
    validationResponse['apiStatus'] = "failed"
    validationResponse['apiErrorCode'] = "1"
    validationResponse['apiDescription'] = "Account是必填项或格式无效"
    statusCode = 415
    return [returnValidateConditional, validationResponse, statusCode]

# 验证通过后的后续逻辑
returnValidateConditional = True
# ...你的业务代码

补充说明

  • 若使用API Gateway的Lambda代理集成,可在网关配置中设置请求模板自动解析JSON,但手动解析的方式对异常情况更可控。
  • 建议提前判断eventJson['body']是否为空,避免解析空字符串触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:18