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