亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Go 將復雜的 http json 響應數組轉換為簡單的結構切片,而無需創建多個結構來匹配響應

使用 Go 將復雜的 http json 響應數組轉換為簡單的結構切片,而無需創建多個結構來匹配響應

Go
POPMUISE 2022-10-10 17:51:52
如果http響應的格式不是直接的對象列表,那么我可以弄清楚如何將它們轉換為結構的唯一方法是創建兩個結構來匹配響應的確切格式。無論如何,我可以在其中創建一個 Product 結構而不需要創建 ProductRes 包裝器結構嗎?下面是我調用的 api 響應的示例:{    "items": [        {            "name": "Product 1",            "price": 20.45        },        {            "name": "Product 2",            "price": 31.24        }                ]}這是我創建的兩個結構,用于將 api 響應轉換為 Product 切片:type Product struct {    Name          string  `json:"name"`    Price         float64 `json:"price"`}type ProductRes struct {    Items []Product `json:"items"`}以下是發出 api 請求并將響應轉換為 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 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

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"]


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號