如何将 JSON 字符串作为查询参数传递给 API 网关

How to pass a JSON string to API Gateway as query Parameter

如何将 JSON 对象(如 {val: 1})作为查询参数传递给我的 Lambda 函数?
Standardized way to serialize JSON to query string? 之后,我 URL 编码了我的 JSON 对象并请求了以下内容:mysite.com/path?json=%7B%22val%22%3A%201%7D

作为requestTemplates我尝试了以下两个选项

  1. "json": "$input.params().querystring.json"
  2. "json": "$util.parseJson($input.params().querystring.json)"

但我收到此错误消息:

{"message": "Could not parse request body into json: Unexpected character (\'v\' (code 118)): was expecting comma to separate OBJECT entries\n at [Source: [B@37a2970e; line: 1, column: 47]"}

如果我不对查询字符串进行编码,那么:mysite.com/path?json={"val":1} 我收到 400 错误

  1. 您的映射模板未生成有效 JSON,您必须将 key/value 对括在花括号中
  2. 我猜你不想把值用引号括起来,否则它将是一个字符串而不是对象
  3. 您可以使用 $util.urlDecode 解码 URL 编码的字符串

您的映射模板应如下所示:

{"json": $util.urlDecode($input.params().querystring.json)}

对于 mysite.com/path?json=%7B%22val%22%3A%201%7D,此映射模板将产生以下结果 JSON:

{
  "json": {
    "val": 1
  }
}

如果您希望在根级别将查询字符串 JSON 传递给您的 Lambda 函数,请将其用作映射模板:

$util.urlDecode($input.params().querystring.json)