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

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

如何將具有動態(tài)字段的 JSON 對象映射到 Go 結(jié)構(gòu)體

如何將具有動態(tài)字段的 JSON 對象映射到 Go 結(jié)構(gòu)體

Go
紅糖糍粑 2021-09-10 10:10:08
我正在使用 Go 開發(fā)一個網(wǎng)站并將其連接到 Elastic Search。在彈性搜索中,我可以擁有索引類型的動態(tài)字段。當(dāng)我從 Elastic Search 讀取文檔時,它會返回一個 JSON 對象作為結(jié)果,其中可以包含具有動態(tài)名稱的字段(或用戶定義的字段)。我可以獲取 JSON 結(jié)果并將其解組為 Go 結(jié)構(gòu),但我不知道將這些動態(tài)字段保留為 Go 結(jié)構(gòu)一部分的最佳方法是什么。這就是我正在做的。例如,如果我從 Elastic Search 獲取聯(lián)系人的文檔,它可能如下所示:{     "EmailAddress": "test@test.com",   "Name": "Test Contact",   "Phone": "17894785236",   "City": "San Francisco",   "State": "California"}用于 Contact 的 Go 結(jié)構(gòu)是:type Contact struct {    EmailAddress            string    Name                    string    Phone                   string    CustomFields            map[string]interface{}}我實現(xiàn)了Marshaler和Unmarshaler來覆蓋對象的編組和解組方式。func (c *Contact) MarshalJSON() ([]byte, error) {    contactMap := make(map[string]interface{})    contactMap["EmailAddress"] = c.EmailAddress    contactMap["Name"] = c.Name    contactMap["Phone"] = c.Phone    for k, v := range c.CustomFields {        contactMap[k] = v    }    return json.Marshal(contactMap)}func (c *Contact) UnmarshalJSON(data []byte) error {    var contactMap map[string]interface{}    if c == nil {        return errors.New("RawString: UnmarshalJSON on nil pointer")    }    if err := json.Unmarshal(data, &contactMap); err != nil {        return err    }    c.EmailAddress = contactMap["EmailAddress"].(string)    c.Name = contactMap["Name"].(string)    c.Phone = contactMap["Phone"].(string)    for key, val := range contactMap {        if key != "EmailAddress" && key != "Name" && Key != "Phone" {            c.CustomFields[key] = value        }    }    return nil}這是最好的方法嗎?你會推薦什么?
查看完整描述

2 回答

  • 2 回答
  • 0 關(guān)注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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