使用 Go,我試圖從多個(gè)端點(diǎn)同時(shí)獲取一些 JSON 響應(yīng)。我想將這些響應(yīng)中的每一個(gè)附加到結(jié)構(gòu)或映射中的字段,并將此結(jié)構(gòu)/映射作為 JSON 對(duì)象返回。(前端模式的后端)。因此,我將使用某種標(biāo)識(shí)符向 Go 應(yīng)用程序發(fā)出 Web 請(qǐng)求。它會(huì)依次發(fā)出多個(gè) Web 請(qǐng)求,并將數(shù)據(jù)編譯成一個(gè)大對(duì)象以作為響應(yīng)返回。我使用 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 中解組這些數(shù)據(jù),因?yàn)槲也恍枰ㄎ抑皇呛?jiǎn)單地傳遞它)。我是否必須解組它才能像這樣將它設(shè)置為我的響應(yīng)結(jié)構(gòu)中的一個(gè)字段?type main_response struct { Service1 []byte `json:"service1"` Service2 map[string]string `json:"service2"` Service3 map[string]interface{} `json:"service3"`}(我嘗試了幾種不同的方法來實(shí)現(xiàn)這一點(diǎn)。嘗試使用字節(jié)數(shù)組似乎對(duì)響應(yīng)進(jìn)行了 base64 編碼)我想在返回之前將該結(jié)構(gòu)編組為 JSON,所以也許我別無選擇,因?yàn)槲蚁氩怀鲆环N方法來告訴 Go“只編組主結(jié)構(gòu),其他一切都已經(jīng)是 JSON”。在這一點(diǎn)上,我?guī)缀醺杏X最好還是構(gòu)建一個(gè)字符串。
1 回答

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用json.RawMessage將[]byte
包含的 JSON 直接復(fù)制到響應(yīng) JSON 文檔:
type main_response struct {
Service1 json.RawMessage `json:"service1"`
...
}
response := &main_response{
Service1: body,
}
return c.Status(code).JSON(response)
- 1 回答
- 0 關(guān)注
- 97 瀏覽
添加回答
舉報(bào)
0/150
提交
取消