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

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

在Go中解碼可變模式JSON

在Go中解碼可變模式JSON

Go
肥皂起泡泡 2021-05-03 16:48:47
我想問有關(guān)Go的問題encoding/json,但我想它也適用于將JSON Blob映射到任何語(yǔ)言的對(duì)象的任何其他JSON庫(kù)。這是一個(gè)例子。如果您想使用goo.gl URL Shortener API來縮短URL ,則可以返回一個(gè)成功的響應(yīng):{ "kind": "urlshortener#url", "id": "http://goo.gl/fbsS", "longUrl": "http://www.google.com/"}或錯(cuò)誤響應(yīng):{ "error": {  "errors": [   {    "domain": "global",    "reason": "required",    "message": "Required",    "locationType": "parameter",    "location": "resource.longUrl"   }  ],  "code": 400,  "message": "Required" }}有沒有一種慣用的方式來處理這個(gè)問題-可能會(huì)遵循兩個(gè)完全不同的模式的響應(yīng)?通常,我使用地圖/列表處理JSON;我知道Go中有可能。我可以解組到a map[string]interface{},然后檢查地圖是否已"error"作為關(guān)鍵。但是,我想我必須再次將其解碼為適當(dāng)?shù)膕truct。(我錯(cuò)了嗎?)我正在做這樣的事情。對(duì)于每種響應(yīng),我都有一種類型:type successResponse struct {    Kind string    Id string    LongUrl string}type errorResponse struct {    Error struct {        Errors []struct {            Domain string            Reason string            Message string            LocationType string            Location string        }        Code int        Message string    }}解碼看起來像這樣:s := new(successResponse)err := json.Unmarshal(blob, s)if err == nil {    // handle success} else {    e := new(errorResponse)    err = json.Unmarshal(blob, e)    if err == nil {        // handle error response    } else {        // handle actual error    }}但這看起來很難看。我應(yīng)該如何處理?
查看完整描述

3 回答

?
守候你守候我

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

由于json響應(yīng)中的字段彼此不同,因此您只需創(chuàng)建一個(gè)具有所有字段并集的結(jié)構(gòu)即可。json解碼器將忽略json字符串中不存在的字段,并且您可以測(cè)試這些字段的存在,以了解要返回的響應(yīng)類型。


查看完整回答
反對(duì) 回復(fù) 2021-05-17
?
胡說叔叔

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

我對(duì)此也感到困惑,并以為我必須再次對(duì)其進(jìn)行解碼。不過你沒有。您只需要將interface {}數(shù)據(jù)類型轉(zhuǎn)換為適當(dāng)?shù)慕Y(jié)構(gòu)。

例如,如果JSON包已經(jīng)把值轉(zhuǎn)換成通用的interface{},可以強(qiáng)制轉(zhuǎn)換成ErrorTypeerror := val.(ErrorType)。

如果要根據(jù)值的類型進(jìn)行解析,則可以foo.(type)switch語(yǔ)句中使用“做正確的事”。

我本周只學(xué)習(xí)Go,所以它不是最漂亮的代碼,但是geodns JSON配置解析中有一些示例。


查看完整回答
反對(duì) 回復(fù) 2021-05-17
?
慕田峪7331174

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

type Response struct {

    Kind    string

    Id      string

    LongUrl string

    Error   struct {

        Errors []struct {

            Domain       string

            Reason       string

            Message      string

            LocationType string

            Location     string

        }

        Code    int

        Message string

    }

}


s := Response{}

if err := json.Unmarshal(blob, &s); err == nil {

    if s.Error == nil {

        // success

    } else {

        // error

    }

} else {

    // something went wrong

}


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

添加回答

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