使用 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}