登录
首页 >  Golang >  Go问答

Go:如何传递 JSON 响应而不解组它

来源:stackoverflow

时间:2024-03-30 12:09:34 497浏览 收藏

大家好,我们又见面了啊~本文《Go:如何传递 JSON 响应而不解组它》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

使用 go,我尝试从多个端点同时获取一些 json 响应。我想将每个响应附加到结构或映射中的字段,并将该结构/映射作为 json 对象返回。 (前端模式的后端)。因此,我将使用某种标识符向 go 应用程序发出 web 请求。它将依次发出多个 web 请求,并将数据编译成一个大对象以作为响应返回。

我使用 fiber 作为我的框架,但任何通用的 web 框架都是类似的:

app.get("/requests/:identifier", func(c *fiber.ctx) error {
    identifier := c.params("identifier")
    timeout := 1600 * time.millisecond
    client := httpclient.newclient(httpclient.withhttptimeout(timeout))
    res, err := client.get("https://www.example.com/endpoint?id=" + identifier, nil)

    if err != nil{
        logger.error("timout value exceeded")
        return c.status(503).sendstring("socket timeout")
    }

    logger.info("fetch success: ")

    // heimdall returns the standard *http.response object
    body, err := ioutil.readall(res.body)
    code := 200

    response := &main_response{
        service1: body,
    }

    return c.status(code).json(response)
})

我遇到的问题是,我不需要在 go 中解组这些数据,因为我没有用它(我只是将其传递)。我是否必须解组它才能将其设置为我的响应结构中的字段,如下所示?

type main_response struct {
    Service1 []byte `json:"service1"`
    Service2 map[string]string `json:"service2"`
    Service3 map[string]interface{} `json:"service3"`
}

(我尝试了几种不同的方法来完成此任务。尝试使用字节数组似乎对响应进行了 base64 编码)

我想在返回之前将该结构封送为 json,所以也许我别无选择,因为我想不出一种方法来告诉 go“仅封送主结构,其他所有内容都已经是 json”。几乎感觉我现在最好构建一个字符串。


正确答案


使用 json.RawMessage 将包含 json 的 []byte 直接复制到响应 json 文档:

type main_response struct {
    Service1 json.RawMessage `json:"service1"`
    ...
}

response := &main_response{
    Service1: body,
}

return c.Status(code).JSON(response)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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