Execution failed due to configuration error: Malformed Lambda proxy response while sending back nested JSON value
Execution failed due to configuration error: Malformed Lambda proxy response while sending back nested JSON value
我有一个 lambda 函数,它从 dynamdb table 返回一个值给我。该值采用嵌套 jason 格式。
当我在它自己的控制台中测试 lambda 时,它工作正常。
但
当我将它与 API 网关集成时,它给我一个内部服务器错误消息。
Execution failed due to configuration error: Malformed Lambda proxy response
这是我的回复正文
return {
"isBase64Encoded": "true",
"statusCode": 200,
"headers": { "Access-Control-Allow-Methods": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Origin": "*" },
"body": response
}
有谁知道这个问题。
我试过
return {
"isBase64Encoded": "true",
"statusCode": 200,
"headers": { "Access-Control-Allow-Methods": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Origin": "*" },
"body": json.dumps(response['Items'])
}
似乎有效。
这是什么问题导致的?因为如果我有一个正常的 JSON.
"body": response
工作正常。仅当存在嵌套 JSON
时才会出现此问题
这是 JSON 对象:
[
{
"time_stamp":"2021-01-13 06:02:42",
"broker_id":"broker1",
"load_id":"ab6fd05f-3f54-44dc-ae6d-28e924fe1ae2",
"messages":[
{
"date":"22:32",
"messanger_id":"carrier@abc.com",
"message":"Hello",
"user":"carrier"
},
{
"date":"22:35",
"messanger_id":"broker@abc.com",
"message":"Hi",
"user":"broker"
}
],
"carrier_id":"carrier1"
},
{
"time_stamp":"2021-01-13 06:03:32",
"broker_id":"broker1",
"load_id":"ab6fd05f-3f54-44dc-ae6d-28e924fe1ae2",
"messages":[
{
"date":"22:32",
"messanger_id":"carrier@abc.com",
"message":"Hello",
"user":"carrier"
},
{
"date":"22:35",
"messanger_id":"broker@abc.com",
"message":"Hi",
"user":"broker"
}
],
"carrier_id":"carrier2"
}
]
它适用于 json.dumps
,因为您将获得 JSON 字符串,这是代理 lambda 集成所必需的。来自 docs:
With the Lambda proxy integration, the Lambda function must return output of the following format:
{
statusCode: "...", // a valid HTTP status code
headers: {
custom-header: "..." // any API-specific custom header
},
body: "...", // a JSON string.
isBase64Encoded: true|false // for binary support
}
如您所见,JSON string
必须在 body
中使用。你不能像写 "body": response['Items']
那样 return 纯 json object
我有一个 lambda 函数,它从 dynamdb table 返回一个值给我。该值采用嵌套 jason 格式。
当我在它自己的控制台中测试 lambda 时,它工作正常。 但 当我将它与 API 网关集成时,它给我一个内部服务器错误消息。
Execution failed due to configuration error: Malformed Lambda proxy response
这是我的回复正文
return {
"isBase64Encoded": "true",
"statusCode": 200,
"headers": { "Access-Control-Allow-Methods": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Origin": "*" },
"body": response
}
有谁知道这个问题。
我试过
return {
"isBase64Encoded": "true",
"statusCode": 200,
"headers": { "Access-Control-Allow-Methods": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Origin": "*" },
"body": json.dumps(response['Items'])
}
似乎有效。
这是什么问题导致的?因为如果我有一个正常的 JSON.
"body": response
工作正常。仅当存在嵌套 JSON
时才会出现此问题这是 JSON 对象:
[
{
"time_stamp":"2021-01-13 06:02:42",
"broker_id":"broker1",
"load_id":"ab6fd05f-3f54-44dc-ae6d-28e924fe1ae2",
"messages":[
{
"date":"22:32",
"messanger_id":"carrier@abc.com",
"message":"Hello",
"user":"carrier"
},
{
"date":"22:35",
"messanger_id":"broker@abc.com",
"message":"Hi",
"user":"broker"
}
],
"carrier_id":"carrier1"
},
{
"time_stamp":"2021-01-13 06:03:32",
"broker_id":"broker1",
"load_id":"ab6fd05f-3f54-44dc-ae6d-28e924fe1ae2",
"messages":[
{
"date":"22:32",
"messanger_id":"carrier@abc.com",
"message":"Hello",
"user":"carrier"
},
{
"date":"22:35",
"messanger_id":"broker@abc.com",
"message":"Hi",
"user":"broker"
}
],
"carrier_id":"carrier2"
}
]
它适用于 json.dumps
,因为您将获得 JSON 字符串,这是代理 lambda 集成所必需的。来自 docs:
With the Lambda proxy integration, the Lambda function must return output of the following format:
{
statusCode: "...", // a valid HTTP status code
headers: {
custom-header: "..." // any API-specific custom header
},
body: "...", // a JSON string.
isBase64Encoded: true|false // for binary support
}
如您所见,JSON string
必须在 body
中使用。你不能像写 "body": response['Items']