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

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

如何將 map[string]interface{} 數據轉換為 struct

如何將 map[string]interface{} 數據轉換為 struct

Go
FFIVE 2022-10-24 15:30:37
我不知道怎么問,所以我舉個例子問。我有一些這樣的數據{..    "velocityStatEntries":  {    "8753":  {        "estimated":  {"value":  23.0,"text":  "23.0"},        "completed":  {"value":  27.0,"text":  "27.0"}    },    "8673":  {        "estimated":  {"value":  54.5,"text":  "54.5"},        "completed":  {"value":  58.5,"text":  "58.5"}    },    .    .    .    }..}我想聲明一個類型,它將映射鍵作為它的“KEY”或我給定的任何屬性。是否可以不使用地圖迭代?預期輸出:{...   "velocityStatEntries": {   {     "key": "8753",     "estimated":  {"value":  54.5,"text":  "54.5"},     "completed":  {"value":  58.5,"text":  "58.5"}   },   {     "key": "8673",     "estimated":  {"value":  54.5,"text":  "54.5"},     "completed":  {"value":  58.5,"text":  "58.5"}   },  }...}這就是我所做的type VelocityStatEntry struct {    Key string    Estimated struct {        Value float64 `json:"value"`        Text  string  `json:"text"`    } `json:"estimated"`    Completed struct {        Value float64 `json:"value"`        Text  string  `json:"text"`    } `json:"completed"`}type RapidChartResponse struct {    ...    VelocityStatEntries map[string]VelocityStatEntry `json:"velocityStatEntries"`    ..}但它不起作用。我想將該字符串映射鍵帶到 KEY 屬性。
查看完整描述

1 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

如果數據來自 JSON,那么您應該跳過map[string]interface{}并使用由您想要的結構實現的自定義解組器來執行您想要的操作。也許通過利用map[string]json.RawMessage. 但是map[string]interface{}結構轉換很痛苦,如果可能的話,避免它。


例如:


type VelocityStatEntryList []*VelocityStatEntry


func (ls *VelocityStatEntryList) UnmarshalJSON(data []byte) error {

    var m map[string]json.RawMessage

    if err := json.Unmarshal(data, &m); err != nil {

        return err

    }

    for k, v := range m {

        e := &VelocityStatEntry{Key: k}

        if err := json.Unmarshal([]byte(v), e); err != nil {

            return err

        }

        *ls = append(*ls, e)

    }

    return nil

}

https://go.dev/play/p/VcaW_BWXRVr




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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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