第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

解組到自定義接口

解組到自定義接口

Go
LEATH 2023-04-24 15:54:26
通常的解組方法是這樣的:atmosphereMap := make(map[string]interface{})err := json.Unmarshal(bytes, &atmosphereMap)但是如何將json數(shù)據(jù)解組到自定義接口:type CustomInterface interface {    G() float64} atmosphereMap := make(map[string]CustomInterface)err := json.Unmarshal(bytes, &atmosphereMap)第二種方式給我一個(gè)錯(cuò)誤:panic: json: cannot unmarshal object into Go value of type main.CustomInterface如何正確地做到這一點(diǎn)?
查看完整描述

1 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

要解組為一組類(lèi)型,它們都實(shí)現(xiàn)一個(gè)公共接口,您可以json.Unmarshaler在父類(lèi)型上實(shí)現(xiàn)接口,map[string]CustomInterface在您的情況下:

type CustomInterfaceMap map[string]CustomInterface


func (m CustomInterfaceMap) UnmarshalJSON(b []byte) error {

? ? data := make(map[string]json.RawMessage)

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

? ? ? ? return err

? ? }

? ? for k, v := range data {

? ? ? ? var dst CustomInterface

? ? ? ? // populate dst with an instance of the actual type you want to unmarshal into

? ? ? ? if _, err := strconv.Atoi(string(v)); err == nil {

? ? ? ? ? ? dst = &CustomImplementationInt{} // notice the dereference

? ? ? ? } else {

? ? ? ? ? ? dst = &CustomImplementationFloat{}

? ? ? ? }


? ? ? ? if err := json.Unmarshal(v, dst); err != nil {

? ? ? ? ? ? return err

? ? ? ? }

? ? ? ? m[k] = dst

? ? }

? ? return nil

}

確保您解組為CustomInterfaceMap,而不是map[string]CustomInterface,否則自定義UnmarshalJSON方法將不會(huì)被調(diào)用。

json.RawMessage是一種有用的類(lèi)型,它只是一個(gè)原始編碼的 JSON 值,這意味著它是一個(gè)簡(jiǎn)單的[]byteJSON 以未解析的形式存儲(chǔ)在其中。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)