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

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

Golang:來自 URL 的 Json 作為地圖

Golang:來自 URL 的 Json 作為地圖

Go
明月笑刀無情 2021-10-18 16:52:11
從 url 中提取 json 的最佳方法是什么,即來自 Go 的 Rest 服務(wù)?此外,似乎大多數(shù)其余客戶端庫都強(qiáng)制使用 json.marshall ,它需要一個與之一起使用的結(jié)構(gòu)。這在非結(jié)構(gòu)化數(shù)據(jù)的情況下不起作用,您不完全知道將要輸入什么。有沒有辦法讓它全部作為地圖 [string:string] 輸入?
查看完整描述

2 回答

?
慕村9548890

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

為什么不把它解析成 map[string]string 因為這段代碼必須做


var d map[string]interface{}

data, err := json.Unmarshal(apiResponse, &d)

您也可以遍歷此結(jié)構(gòu)中的數(shù)據(jù)。


如果您懷疑,該 api 響應(yīng)可以不是單一對象,而是對象的集合,interface{}也適用于數(shù)組。


查看完整回答
反對 回復(fù) 2021-10-18
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊

如果您不知道消息中的內(nèi)容,則可能有幾種情況。


取決于類型的消息內(nèi)容

類型通常由某個類型字段指示。在這種情況下,您可以使用包含所有類型字段的“聯(lián)合”結(jié)構(gòu):


type Foo struct {

    A int

    B string

}


type Bar struct {

    C int

    D string

}


type Message struct {

    Type string

    Foo

    Bar

}


// or this, if you have common fields


type Message struct {

    Type string

    A int

    B string

    C int

    D string

}

將消息解組到聯(lián)合結(jié)構(gòu)中,按類型分派,然后選擇子結(jié)構(gòu)。


var m Message

json.Unmarshal(data, &m)

switch m.Type {

    case "foo":

        ...

    case "bar":

        ...

}

完全動態(tài)消息

在這種情況下,您有一組不相關(guān)的鍵值并單獨處理它們。


解析為map[string]interface{}. 當(dāng)然,缺點是您必須強(qiáng)制轉(zhuǎn)換每個值并動態(tài)檢查其類型。警告: map[string]interface{}將所有數(shù)字轉(zhuǎn)換為浮點數(shù),甚至是整數(shù),因此您已將它們轉(zhuǎn)換為float64.


map[string]json.RawMessage如果您不想解析值,也可以使用,只有鍵(json.RawMessage是 a []byte,并且在解組時保持原樣)。


帶有動態(tài)負(fù)載的“信封”消息

例如:


{

    "type": "foo",

    "payload": {

        "key1": "value1"

    }

}


{

    "type": "bar",

    "payload": {

        "key2": "value2",

        "key3": [1, 2]

    }

}

將結(jié)構(gòu)與json.RawMessage.


type Message struct {

    Type string

    Payload json.RawMessage

}


type Foo struct {

    Key1 string

}


type Bar struct {

    Key2 string

    Key3 []int

}

解析信封(有效載荷將被保留),然后按類型分派,并將有效載荷解析為子結(jié)構(gòu)。


var m Message

_ = json.Unmarshal(data, &m)

switch m.Type {

    case "foo":

        var payload Foo

        _ = json.Unmarshal(m.Payload, &payload)

        // do stuff

    case "bar":

        var payload Bar

        _ = json.Unmarshal(m.Payload, &payload)

        // do stuff

}


查看完整回答
反對 回復(fù) 2021-10-18
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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