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

如何让AWS Lambda返回的farms字段为JSON而非字符串?

解决Lambda+API Gateway返回JSON数组时的日期序列化问题

方案1:在Lambda中预处理日期字段,直接返回数组

核心思路是把查询结果中的datetime类型字段转换为JSON可序列化的格式(比如ISO字符串),然后直接返回包含数组的字典,无需对farms字段单独做json.dumps。

  1. 编写日期转换辅助函数:
import datetime

def convert_serializable(data):
    if isinstance(data, list):
        return [convert_serializable(item) for item in data]
    elif isinstance(data, dict):
        processed = {}
        for key, value in data.items():
            if isinstance(value, datetime.datetime):
                processed[key] = value.isoformat()
            elif isinstance(value, (list, dict)):
                processed[key] = convert_serializable(value)
            else:
                processed[key] = value
        return processed
    elif isinstance(data, datetime.datetime):
        return data.isoformat()
    return data
  1. 修改Lambda函数逻辑:
def get_all_farms(self, event, context):
    params = event["queryParams"]
    offset = int(params["offset"] or 0)
    max = int(params["max"] or 20)
    result = db.get_all_farms_paginated(offset, max)
    # 处理结果中的日期字段
    processed_farms = convert_serializable(result)
    return {
        "error": False,
        "message": "success",
        "farms": processed_farms
    }

这样返回的farms是原生数组,API Gateway会自动将整个响应序列化为正确的JSON结构,最终返回的响应中farms就是JSON数组而非字符串。

方案2:使用Lambda代理集成(简化配置)

如果可以调整API Gateway的集成模式为代理模式,Lambda返回的字典会被API Gateway直接作为响应体处理,同样需要先处理日期字段。

修改CDK中的集成配置:

myfarm_resource.add_method(
    "GET",
    integration=apigateway.LambdaIntegration(
        api_lambda_myfarm,
        proxy=True,  # 改为代理模式
    ),
    method_responses=[
        apigateway.MethodResponse(
            status_code="200",
        )
    ],
)

Lambda函数的处理逻辑和方案1一致,预处理日期后直接返回字典即可。代理模式下无需配置请求/响应模板,配置更简洁。

问题根源说明

  • 直接返回result:查询结果中包含datetime等不可JSON序列化的类型,API Gateway在序列化响应时会抛出转换错误。
  • 使用json.dumps(result):将数组转为字符串后放入响应字典,API Gateway序列化整个字典时,会把这个字符串再次转义,导致farms字段是带转义符的字符串而非数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:11:08