登录
首页 >  Golang >  Go问答

ApiGateway中使用lambda Go返回Json数据

来源:stackoverflow

时间:2024-02-07 13:57:23 350浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《ApiGateway中使用lambda Go返回Json数据》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

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

这就是我所期望的, { "data": {"用户名":"随机用户","年龄":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"}

应用程序将 data 中的 json 编码为 json。使用 json.RawMessage 消除额外的 json 编码级别。

var data = json.RawMessage(`
    {
        "username":"Random User",
        "Age":20
    }`)

以上就是《ApiGateway中使用lambda Go返回Json数据》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>