在Go語(yǔ)言中,我們經(jīng)常會(huì)用到JSON這種數(shù)據(jù)序列化格式。當(dāng)我們需要從JSON字符串中解析數(shù)據(jù)并還原成Go語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)時(shí),就要用到j(luò)son.Unmarshal()方法。這個(gè)方法定義在encoding/json包中,用于將JSON字符串解碼成Go語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)。
json.Unmarshal()方法需要兩個(gè)參數(shù):第一個(gè)參數(shù)是用于解碼的JSON字符串,第二個(gè)參數(shù)是一個(gè)指針,用于保存解碼出來(lái)的數(shù)據(jù)結(jié)構(gòu)。具體的使用方法可以參考如下代碼:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
}
func main() {
jsonStr := `{ "Name": "張三", "Age": 18 }`
var p Person
err := json.Unmarshal([]byte(jsonStr), &p)
if err != nil {
fmt.Println("解碼出錯(cuò):", err)
}
fmt.Println(p.Name, p.Age)
}
運(yùn)行上述代碼,會(huì)輸出:張三 18。在這個(gè)例子中,我們先定義了一個(gè)Person結(jié)構(gòu)體,然后創(chuàng)建一個(gè)JSON字符串作為輸入,最后通過(guò)json.Unmarshal()方法將JSON字符串解碼成一個(gè)Person結(jié)構(gòu)體。
需要注意的是,在解碼時(shí),需要指定目標(biāo)數(shù)據(jù)結(jié)構(gòu)的類型,并將其作為第二個(gè)參數(shù)傳入json.Unmarshal方法中。在解碼完成后,解碼出錯(cuò)時(shí)會(huì)返回一個(gè)非nil的error。同時(shí),JSON字符串的格式必須符合Go的語(yǔ)法規(guī)范,否則會(huì)解碼失敗。