如果http響應(yīng)的格式不是直接的對(duì)象列表,那么我可以弄清楚如何將它們轉(zhuǎn)換為結(jié)構(gòu)的唯一方法是創(chuàng)建兩個(gè)結(jié)構(gòu)來(lái)匹配響應(yīng)的確切格式。無(wú)論如何,我可以在其中創(chuàng)建一個(gè) Product 結(jié)構(gòu)而不需要?jiǎng)?chuàng)建 ProductRes 包裝器結(jié)構(gòu)嗎?下面是我調(diào)用的 api 響應(yīng)的示例:{ "items": [ { "name": "Product 1", "price": 20.45 }, { "name": "Product 2", "price": 31.24 } ]}這是我創(chuàng)建的兩個(gè)結(jié)構(gòu),用于將 api 響應(yīng)轉(zhuǎn)換為 Product 切片:type Product struct { Name string `json:"name"` Price float64 `json:"price"`}type ProductRes struct { Items []Product `json:"items"`}以下是發(fā)出 api 請(qǐng)求并將響應(yīng)轉(zhuǎn)換為 Product 切片的部分代碼:req, err := http.NewRequest(http.MethodGet, url, nil)if err != nil { log.Fatalln(err)}resp, err := c.client.Do(req)if err != nil { log.Fatalln(err)}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil { log.Fatalln(err)}products := ProductRes{}// This line makes me think I actually do need multiple structs, unless I can modify body somehow prior to sending it in herejson.Unmarshal(body, &products)
1 回答

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
ProductRes您可以使用匿名類型消除聲明的類型:
var wrapper struct { Items []Product }
err := json.Unmarshal(body, &wrapper)
if err != nil {
// TODO: handle error
}
products := wrapper.Items
您還可以使用地圖:
var m map[string][]Product
err := json.Unmarshal(body, &m)
if err != nil {
// TODO: handle error
}
products := m["items"]
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)
0/150
提交
取消