使用 Go 結構進行 EncodingDecoding

假設我們有以下定義 City 型別的 struct

type City struct {  
    Name string  
    Temperature int  
}

我們可以使用 encoding/json 包對 City 值進行編碼/解碼。

首先,我們需要使用 Go 後設資料告訴編碼器 struct 欄位和 JSON 鍵之間的對應關係。

type City struct {  
    Name string `json:"name"`  
    Temperature int `json:"temp"`  
    // IMPORTANT: only exported fields will be encoded/decoded  
    // Any field starting with a lower letter will be ignored  
}  

為了簡化這個例子,我們將宣告欄位和鍵之間的明確對應關係。但是,你可以使用文件中說明json:後設資料的幾種變體。

重要資訊: **只有匯出的欄位 (具有大寫名稱的欄位)才會被序列化/反序列化。**例如,如果你的名字領域 temperature 將即使你設定 json 後設資料被忽略。

編碼

要編碼 City 結構,請使用 json.Marshal,如基本示例所示:

// data to encode  
city := City{Name: "Rome", Temperature: 30}  
 
// encode the data  
bytes, err := json.Marshal(city)  
if err != nil {  
    panic(err)  
}  
 
fmt.Println(string(bytes))  
// {"name":"Rome","temp":30} 

操場

解碼

要解碼 City 結構,請使用 json.Unmarshal,如基本示例所示:

// data to decode  
bytes := []byte(`{"name":"Rome","temp":30}`)  
 
// initialize the container for the decoded data  
var city City  
 
// decode the data  
// notice the use of &city to pass the pointer to city  
if err := json.Unmarshal(bytes, &city); err != nil {  
    panic(err)  
}  
 
fmt.Println(city)  
// {Rome 30} 

操場