Go:如何传递 JSON 响应而不解组它
大家好,我们又见面了啊~本文《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的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341