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

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

根據(jù)golang中的條件執(zhí)行自解組方法或默認解組方法

根據(jù)golang中的條件執(zhí)行自解組方法或默認解組方法

Go
慕森王 2023-04-24 16:57:53
我是golang的新手。我有一個結(jié)構(gòu)Item。type Item Struct{   ...}我知道它有一個默認的UnmarshalJSON方法。現(xiàn)在我想將數(shù)據(jù)解組到它。對于數(shù)據(jù)可能有兩種不同的格式。所以我的期望如下:if condition {    //execute default UnmarshalJSON    json.Unmarshal(data, &item) }else{    //execute my own UnmarshalJSON    json.Unmarshal(data, &item) }這是我自己的 UnmarshalJSON。func (item *Item) UnmarshalJSON(data []byte) error{   ...}也許我自己 UnmarshalJSON 會覆蓋默認值,所以這兩個方法不能同時存在。我想知道如何解決這種將兩種不同格式的數(shù)據(jù)解組到一個結(jié)構(gòu)中的問題。
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經(jīng)驗 獲得超13個贊

使用一個接口,無論您從 json 響應(yīng)中獲取的格式是什么,并將響應(yīng)解組到接口中:


func main(){

    var result interface{}

    if err := json.Unmarshal(jsonbytes, &result); err != nil{

         fmt.Println(err)

    }

}

然后使用類型斷言獲取接口下的值。但我認為在你的情況下,如果你沒有密鑰的基礎(chǔ)類型。更好的方法是使用遞歸來獲取值。


func fetchValue(value interface{}) {

    switch value.(type) {

    case string:

        fmt.Printf("%v is an interface \n ", value)

    case bool:

        fmt.Printf("%v is bool \n ", value)

    case float64:

        fmt.Printf("%v is float64 \n ", value)

    case []interface{}:

        fmt.Printf("%v is a slice of interface \n ", value)

        for _, v := range value.([]interface{}) { // use type assertion to loop over []interface{}

            fetchValue(v)

        }

    case map[string]interface{}:

        fmt.Printf("%v is a map \n ", value)

        for _, v := range value.(map[string]interface{}) { // use type assertion to loop over map[string]interface{}

            fetchValue(v)

        }

    default:

        fmt.Printf("%v is unknown \n ", value)

    }

}

Go 操場上的工作代碼


上面的代碼可以讓你獲取解析到接口中的任何類型的值。


筆記:


在 golang 中定義了當您將未知的 json 解組到接口中時。它將轉(zhuǎn)換為以下類型:


bool, for JSON booleans

float64, for JSON numbers

string, for JSON strings

[]interface{}, for JSON arrays // slice of interface{}

map[string]interface{}, for JSON objects

nil for JSON null


查看完整回答
反對 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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