1 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果數(shù)據(jù)來(lái)自 JSON,那么您應(yīng)該跳過(guò)map[string]interface{}并使用由您想要的結(jié)構(gòu)實(shí)現(xiàn)的自定義解組器來(lái)執(zhí)行您想要的操作。也許通過(guò)利用map[string]json.RawMessage. 但是map[string]interface{}結(jié)構(gòu)轉(zhuǎn)換很痛苦,如果可能的話,避免它。
例如:
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
- 1 回答
- 0 關(guān)注
- 291 瀏覽
添加回答
舉報(bào)