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