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

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

使用 2 種嵌套類型解析 JSON

使用 2 種嵌套類型解析 JSON

Go
慕哥6287543 2022-05-18 16:35:02
我有 2 個(gè)對(duì)象,例如:type appA struct {  appType string  frontend string}type appB struct {  appType string  backend string}我有一個(gè) JSON 格式的配置文件,例如:[  {    "appType" : "A",    "frontend": "URL"  },  {    "appType": "B",    "backend": "SQL"  }]根據(jù)這個(gè)好主意 - 我創(chuàng)建了另一個(gè)結(jié)構(gòu):type genericApp struct {  appType string}所以現(xiàn)在我可以很好地解組 JSON 并知道 JSON 中的哪個(gè)對(duì)象是哪種應(yīng)用程序。現(xiàn)在我的大問(wèn)題是如何再次“編組和解組” - 我可以以某種方式引用已經(jīng)解組的對(duì)象作為接口并將它們重新解組為不同的對(duì)象嗎?我唯一的其他解決方案是讀取文件 N 次,每次讀取每種結(jié)構(gòu)類型,然后循環(huán)遍歷 genericApp 數(shù)組并從相關(guān)數(shù)組中“收集”匹配的對(duì)象,但這聽(tīng)起來(lái)像是一種糟糕的做法......編輯 我已經(jīng)使用符號(hào)回答了這個(gè)問(wèn)題json:...omitempty,但我仍然有一個(gè)問(wèn)題 - 如果兩個(gè)單獨(dú)的對(duì)象具有不同類型的相同字段名稱怎么辦?例如 appType 可以是字符串還是數(shù)字?
查看完整描述

2 回答

?
動(dòng)漫人物

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

創(chuàng)建一個(gè) config.json 文件并將該 json 放入其中,然后嘗試 id :


type MyAppModel struct {

    AppType  string `json:"appType"`

    Frontend string `json:"frontend,omitempty"`

    Backend  string `json:"backend,omitempty"`

}


func(m *MyAppModel) GetJson()string{

    bytes,_:=json.Marshal(m)

    return string(bytes)

}


func (m MyAppModel) GetListJson(input []MyAppModel) string {

    bytes,_:=json.Marshal(input)

    return string(bytes)

}


func(m MyAppModel) ParseJson(inputJson string)[]MyAppModel{

    model:=[]MyAppModel{}

    err:=json.Unmarshal([]byte(inputJson),&model)

    if err!=nil{

        println(err.Error())

        return nil

    }

    return model

}


func inSomeMethodLikemain(){

    //reading from file

    bytes,err:=ioutil.ReadFile("config.json")

    if err!=nil{

        panic(err)

    }

    configs := MyAppModel{}.ParseJson(string(bytes))

    if configs==nil || len(configs)==0{

        panic(errors.New("no config data in config.json"))

    }

    println(configs[0].AppType)


    //writing to file


    jsonOfList:=MyAppModel{}.GetListJson(configs)

    err=ioutil.WriteFile("config.json",[]byte(jsonOfList),os.ModePerm))

    if err!=nil{

        panic(err.Error())

    }


}


查看完整回答
反對(duì) 回復(fù) 2022-05-18
?
一只萌萌小番薯

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

發(fā)現(xiàn)您可以使用一些 go 語(yǔ)法來(lái)創(chuàng)建一個(gè)大型結(jié)構(gòu):


type genericApp struct {

  appType string

  frontend string `json:"frontend, omitempty"`

  backend string `json:"backend, omitempty"`

}

但是,這有一些問(wèn)題:


如果你有很多類型,它將創(chuàng)建一個(gè)巨大的結(jié)構(gòu)(如果我有 20 個(gè)應(yīng)用程序類型而不是 2 個(gè),這將是 100 行長(zhǎng))

它沒(méi)有給你兩個(gè)單獨(dú)的結(jié)構(gòu) - 你仍然需要稍后實(shí)現(xiàn)這種分離(開(kāi)關(guān)盒或類型轉(zhuǎn)換等)


查看完整回答
反對(duì) 回復(fù) 2022-05-18
  • 2 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報(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)