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

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

在 JSON 和 Golang 中表示不同類型的事物列表

在 JSON 和 Golang 中表示不同類型的事物列表

Go
慕尼黑8549860 2022-12-19 11:48:43
我試圖用 JSON 表示一些數據,其中有一個事物列表,其中每個事物都有一些共同的特征(例如名稱),另一個字段的值可以是字符串或整數。例如:{    "items": [        {            "name": "thing1",            "type": "string",            "value": "foo"        },        {            "name": "thing2",            "type": "int",            "value": 42        }    ]}該 JSON 對我來說看起來很合理,但事實證明,嘗試創建一個數據結構以在 Golang 中將其反序列化(解組)為困難。我想我可以用類多態性在 Java 中做到這一點,但在 Go 中我覺得被困住了。我已經嘗試了很多東西,但還沒有得到它。最終,它歸結為缺乏結構類型多態性。在 Go 中,我可以有一個接口切片(列表),但據我所知,我需要不同類型的實際結構。關于如何在 Golang 中表示它并能夠解組的任何建議?或者,我應該以不同的方式構建 JSON 本身嗎?
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

此數據結構正確地表示您的 JSON:


type Data struct {

    Items []struct {

        Name string `json:"name"`

        Type string `json:"type"`

        Value interface{} `json:"value"`

    } `json:"items"`

}

然后,您可以使用json.Unmarshal. 如果你使用 Go 1.18,你可以any使用interface{}.


此外,在 Go 中你甚至不需要類型字段。您可以使用類型斷言來確定值類型。


查看完整回答
反對 回復 2022-12-19
?
九州編程

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

您可以創建這樣的結構


type items struct {

    name   string

    type_1 string

    value  interface{}

}

接口可以容納任何數據類型,因為類型是保留關鍵字,我使用了 type_1


查看完整回答
反對 回復 2022-12-19
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

你可以在 Go 1.18 中這樣做:


type Data struct {

    Items []struct {

        Name string `json:"name"`

        Type string `json:"type"`

        Value any `json:"value"`

    } `json:"items"`

}


func main() {

    data := Data{}


    // it's your json bytes

    bytesData := []byte()


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

        log.Fatal(err)

    }

}


// use data here 

PS 如果您使用的是舊版本,請使用interface{}而不是any.


查看完整回答
反對 回復 2022-12-19
  • 3 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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