go - 从 ApiGateway 中的 lambda Go 返回 Json

标签 go aws-lambda aws-api-gateway

我正在尝试完成这项工作,我想要的是当使用一些嵌套的 json 从 API 网关调用时,从 lambda 获取 json 作为输出。

这就是我所期望的, { "data": {"username":"随机用户","Age":20}", "message": "这是示例"} 但我逃脱了 json { "data": "\n\t{\n\t\t\"用户名\":\"随机用户\",\n\t\t\"年龄\":20\n\t }", "message": "这是示例"}

我正在尝试的示例代码

package main

import (
    "encoding/json"
    "log"
    "net/http"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

type Response struct {
    StatusCode int               `json:"statusCode"`
    Headers    map[string]string `json:"headers"`
    Body       string            `json:"body"`
}

type RequestBody struct {
    Data    any    `json:"data"`
    Message string `json:"message"`
}

const (
    data string = `
    {
        "username":"Random User",
        "Age":20
    }`
)

func EventHandler(request events.APIGatewayProxyRequest) (Response, error) {
    response := Response{}
    log.Println(request.Headers)
    body := RequestBody{Data: data, Message: "This is sample"}
    b, _ := json.Marshal(body)
    response.Body = string(b)
    response.StatusCode = http.StatusOK
    log.Println("Before Return")
    return response, nil
}

func main() {
    lambda.Start(EventHandler)
}

最佳答案

这是因为要编码(编码为 JSON)一个已包含 JSON 对象的字符串。相反,试试这个:

var data = map[string]any {
        "username":"Random User",
        "Age":20
    }

或者你也可以这样做:

    body := RequestBody{Data: json.RawMessage(data), Message: "This is sample"}

关于go - 从 ApiGateway 中的 lambda Go 返回 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76672281/

相关文章:

java - 无法使用 Lambda 中的 SQS

node.js - 为什么 AWS Lambda 函数总是超时?

python - 使 Python RETURN 200 响应然后运行代码

戈朗 : fatal error: unexpected signal during runtime execution

go - 将数据添加到结构中的 interface{}

go - 从头到尾创建子字符串

amazon-web-services - AWS API Gateway 和 AWS Lambda - 处理客户端证书

pointers - 结构成员的 Golang func 指针

amazon-web-services - 当 aws codebuild 完成时,将整个 cloudwatch 日志发送到 slack

javascript - 如何从AWS API Gateway获取url参数并将其输入到lambda中