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

操场