json - 如何将 JSON 字符串作为查询参数传递给 API Gateway

标签 json velocity aws-lambda aws-api-gateway serverless-framework

我如何传递像 {val: 1} 这样的 JSON 对象到我的 Lambda 函数作为查询参数?
关注 Standardized way to serialize JSON to query string?我对我的 JSON 对象进行 URL 编码并请求以下内容:mysite.com/path?json=%7B%22val%22%3A%201%7D
requestTemplates我尝试了以下两个选项

  • "json": "$input.params().querystring.json"
  • "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 错误

    最佳答案

  • 您的映射模板没有生成有效的 JSON,您必须将键/值对括在花括号中
  • 我猜您不想用引号将值括起来,否则它将是一个字符串并且没有对象
  • 您可以使用 $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)
    

    关于json - 如何将 JSON 字符串作为查询参数传递给 API Gateway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748324/

    相关文章:

    javascript - 无论有没有 JSON.parse() 都无法将 JSON 响应设置为 var

    javascript - 如何过滤Bitfinex API ws2流数据?

    Intellij 上的 FreeMarker/Velocity 中的 HTML 语法高亮显示

    angularjs 接管已经在服务器端呈现的页面

    php - Office 365 SharePoint 网站从外部 MySQL 和/或 PHP 服务器访问数据

    java - 速度:使用分隔符/前缀连接可选字段

    amazon-web-services - 在私有(private) VPC 中使用 SQS 作为 Lambda 的事件源 - 我是否需要 SQS VPC 终端节点?

    amazon-web-services - Lambda/预签名 url 访问被拒绝

    amazon-web-services - $LATEST 版本的 AWS Lambda 的定义

    c# - 用希伯来字母反序列化json