亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何使用結構的類型而不是 go 中的標簽重新編組結構?

如何使用結構的類型而不是 go 中的標簽重新編組結構?

Go
一只斗牛犬 2022-06-27 11:12:49
我想將結構重新編組為 json,并使用結構中定義的類型作為輸出。結構:type A struct{B []B //edit: fields have to be exported to work}type B struct{X string `json:"x"` //edit: fields have to be exported to workY float64 `json:"y,string"` //edit: fields have to be exported to workZ float64 `json:"z,string"` //edit: fields have to be exported to work如果使用這些結構解組,我會得到 By 作為 float64,正如預期的那樣。但是,如果我再次將其重新編組為 JSON,我會得到我解組的 JSON,其中 y 和 z 作為字符串,但我想將它們作為 float64。我必須添加 ',string' 部分,因為 API 在 JSON 響應中將所有內容都作為字符串返回(參見下面的示例)。我是否必須編寫一個自定義編組函數來執行此操作,或者我可以將 json 標記添加到結構定義中嗎?示例響應和重新編組的 json:{    "A": [        {            "x": "test1",            "y": "1.00",            "z": "1.01"        },        {            "x": "test2",            "y": "2.00",            "z": "2.01"        }    ]}預期的重新編組 JSON:{    "A": [        {            "x": "test1",            "y": 1.00,            "z": 1.01        },        {            "x": "test2",            "y": 2.00,            "z": 2.01        }    ]}
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

您根本無法編組或解組這些字段,因為這些字段未導出。但是要執行您所描述的操作,只需轉換為沒有(或不同)結構標記的等效類型。因為它是一個嵌套切片,所以您必須對其進行迭代。


func main() {

    a := A{}

    err := json.Unmarshal(corpus, &a)

    if err != nil {

        panic(err)

    }

    c := C{}

    for _, b := range a.B {

        c.B = append(c.B, D(b))

    }

    payload, _ := json.Marshal(c)

    fmt.Println(string(payload))

}


type A struct {

    B []B

}


type B struct {

    X string  `json:"x"`

    Y float64 `json:"y,string"`

    Z float64 `json:"z,string"`

}


type C struct {

    B []D

}


type D struct {

    X string  `json:"x"`

    Y float64 `json:"y"`

    Z float64 `json:"z"`

}

工作場所示例: https: //play.golang.org/p/pQTcg0RV_RL


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號