鍍金池/ 問答/GO/ Golang json: cannot unmarshal object int

Golang json: cannot unmarshal object into Go value of type錯(cuò)誤

別人項(xiàng)目代碼如下

var seedUrls []string
    // read and parse json,相對(duì)路徑
    b, err := ioutil.ReadFile(confPath + "/" + conf.UrlListFile) //[91 10 32 32 ...]
    if err != nil {
        l4g.Error("readfile err[%s]", err)
        SlowExit()
    }
    //json to []string
    if err := json.Unmarshal(b, &seedUrls); err != nil { //把上面的b轉(zhuǎn)換為[http://www.baidu.com]形式的字符切片
        l4g.Error("parse json err[%s]", err)
        SlowExit()
    }

我的測(cè)試代碼

jsonStr := `{"Name":"lepig", "Age":100}`
    abc := []byte(jsonStr)

    var result []string
    if err := json.Unmarshal(abc, &result); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)

在學(xué)習(xí)golang 看別的一個(gè)項(xiàng)目json解析這里沒看明白。我的測(cè)試代碼運(yùn)行報(bào)錯(cuò)。但是我要是把我測(cè)試代碼里的
var result []string修改為var result interface{}就可以。 不明白的是,別人項(xiàng)目里的聲明的var seedUrls []string為什么就可以

PS: 有php基礎(chǔ),感覺學(xué)習(xí)golang很多東西不能快速理解。不知道如何入門

回答
編輯回答
咕嚕嚕

{"Name":"lepig", "Age":100}JSON Object,無法反序列化到[]string。比如用["a","b","c"]就能反序列化到[]string了。

2018年1月1日 10:14
編輯回答
夏木

你需要定義一個(gè)結(jié)構(gòu)體,因?yàn)間olang是靜態(tài)強(qiáng)類型語言

2018年5月28日 18:03
編輯回答
未命名

由于你的json數(shù)據(jù)傳遞的是一個(gè)對(duì)象,所以接受的Go類型應(yīng)該是一個(gè)結(jié)構(gòu)體。
別人項(xiàng)目中的代碼應(yīng)該傳入的b,應(yīng)該是一個(gè)字符串?dāng)?shù)組形式的json數(shù)據(jù),例如:["abcd","1234"],所以可以使用Go類型的[]string接收。
對(duì)于樓主使用的var result interface{}由于interface可以接收任何類型所以可以使用。

修改方式:
定義一個(gè)結(jié)構(gòu)體類型

type User struct{
    Name string
    Age    int
}
var result User 
if err := json.Unmarshal(abc, &result); err != nil {
        fmt.Println(err)
        return
    }
fmt.Println(result)
2017年12月15日 10:52