Lambda 格式错误的代理响应(未知原因)

Lambda malformed proxy response (Unknown reason)

可能有一个简单的解决方案,但我被卡住了。 API 网关调用我的 lambda 函数应该 return 我的 json 响应,但它给了我同样的“格式错误的代理响应”错误

我已经对响应进行了十几次修改,但据我所知,它没有任何问题吗?这与我从邮递员那里得到的回复相同 API。我在这里做错了什么?

以下屏幕截图是在 cloud9 中测试时的响应,但是当使用代理响应参数从 API 网关获取时,我收到“格式错误的代理响应”错误。

 Response
{
    "statusCode": 200,
    "list": [
        {
            "id": 8000048,
            "name": "ESTACAO DE SERVICO TETE",
            "addr": "EN7, Bairro Samora Machel, Unidade Mpadue",
            "lat": -16.195047,
            "lon": 33.585467,
            "amen": [
                false,
                false,
                "",
                false,
                false,
                false,
                false,
                false,
                false,
                "",
                false,
                false,
                false,
                false
            ],
            "fuel": [
                null,
                null,
                null,
                null,
                null
            ],
            "loc": [
                "Tete",
                "Center",
                "Mozambique",
                "MZ"
            ]
        }
    ]
}

您返回的响应无效。根据 documentation

In Lambda proxy integration, API Gateway requires the backend Lambda function to return output according to the following JSON format:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
    "body": "..."
}

并非所有这些字段都是必需的,但您不能只是向响应中添加随机内容;相反,您应该将对象的字符串化版本设置为 body 字段,例如(使用我不知道的 js python)body: JSON.stringify(info)body: JSON.stringify({ list: info })

很抱歉这个问题缺少信息,由于法律原因我无法分享所有内容。但最终解决方案是对 json 响应进行双重压缩。让我解释一下...

API 网关在将响应返回给客户端之前对其进行解压缩。因此,响应 lambda 中的事件不仅需要对响应进行字符串化,还需要对响应进行双重字符串化(或者我称之为压缩)。基本上,我不得不...

simplejson.dumps(response)
simplejson.dumps(response)

我不确定我是否理解正确,或者我是否使用了正确的术语,所以对这一切持保留态度。谢谢大家。