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

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

如何將嵌套結(jié)構(gòu)編組為平面 JSON

如何將嵌套結(jié)構(gòu)編組為平面 JSON

Go
ABOUTYOU 2022-07-18 16:41:35
我正在嘗試將具有多個(gè)相同結(jié)構(gòu)的嵌套結(jié)構(gòu)編組為平面 JSON 結(jié)構(gòu) EGtype A struct {    Value float64    Unit  string}type B struct {    p1 string `json:p1`    p2 int    `json:p1`    ...    a1 A      `json:"a1,omitempty"`    a2 A      `json:"a1,omitempty"`    ...}調(diào)用時(shí)json.Marshall(B)的目標(biāo)是得到一個(gè)使用上述代碼打印平面結(jié)構(gòu)的 json 結(jié)構(gòu)。所以,而不是{    "p1": "...",    "p2": 1,    ...    "a1": {...}    "a2": {...}    ...}我會(huì)得到一個(gè)類似于{    "p1": "...",    "p2": 1,    ...    "a1": 1.1,    "a1_u": "unit",    "a2": 1.2,    "a2_u": "unit",    ...}我已經(jīng)研究過嵌入的概念,但這只有在 B 中只有一個(gè) A 時(shí)才有效。而且仍然不能完全實(shí)現(xiàn)我的愿望。遺憾的是,JSON 中需要這種結(jié)構(gòu)的原因是不可協(xié)商的。而且需要用到的結(jié)構(gòu)體會(huì)包含大量的A{}. 已知它們將包含什么,因此可以選擇創(chuàng)建和使用如下結(jié)構(gòu)。但隨著項(xiàng)目的發(fā)展,它只會(huì)讓人感到困惑并造成維護(hù)地獄。type C struct {    p1 string `json:p1`    p2 int    `json:p1`    ...    a1   float64 `json:"a1,omitempty"`    a1_u string  `json:"a1_u,omitempty"`    a2   float64 `json:"a2,omitempty"`    a2_U string  `json:"a2_u,omitempty"`    ...}可以選擇編寫自定義編組B{},A{}這可能可以滿足我的需要,問題是我們需要一堆不同的結(jié)構(gòu),這些結(jié)構(gòu)B{}足夠相似,我相信應(yīng)該有一種方法來概括解決這個(gè)問題。思想去使用與反射有關(guān)的東西。但是由于我對(duì) GO 還很陌生,所以我還沒有設(shè)法找出解決方案。谷歌搜索所花費(fèi)的所有努力只會(huì)讓我看到相反的結(jié)果。提前感謝您的任何幫助,如果它是“無法完成”的事件。*編輯B并且通過擴(kuò)展C意味著能夠包含任意數(shù)量A以及一些原語。將來可能會(huì)有類型D,E并且每個(gè)類型都包含不常見的數(shù)量A和原語?;蛘邔?shí)際上是具有這些約束的任意數(shù)量的結(jié)構(gòu)。我要避免的是為每個(gè)新結(jié)構(gòu)編寫一個(gè) Marhaller。
查看完整描述

1 回答

?
UYOU

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

編寫一個(gè)自定義封送器。例子:


type A struct {

    Value float64

    Unit  string

}


type B struct {

    a1 A

    a2 A

}


func (b *B) MarshalJSON() ([]byte, error) {

    intermediate := map[string]interface{}{

        "a1":   b.a1.Value,

        "a1_u": b.a1.Unit,

        "a2":   b.a2.Value,

        "a2_u": b.a2.Unit,

    }

    return json.Marshal(intermediate)

}

根據(jù)您期望此代碼隨時(shí)間增長(zhǎng)/擴(kuò)展的方式,您可能能夠使用某種循環(huán)或反射,但在不知道擴(kuò)展計(jì)劃的情況下,不可能具體。


查看完整回答
反對(duì) 回復(fù) 2022-07-18
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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