golang在處理json數據時,有時候需要對數據進行特定的注解。golang自帶了一個json包,通過在struct的字段上添加注解,我們可以定義如何序列化和反序列化這個struct。注解的形式是在字段的后面添加一個`json`的tag,tag的內容是一個字符串。
// 定義一個struct type Person struct { Name string `json:"name"` Age int `json:"age"` } // 序列化 p := Person{Name: "Tom", Age: 18} b, err := json.Marshal(p) if err != nil { fmt.Println(err) } fmt.Println(string(b)) // 輸出: {"name":"Tom","age":18} // 反序列化 b2 := []byte(`{"name":"Tom","age":18}`) var p2 Person err = json.Unmarshal(b2, &p2) if err != nil { fmt.Println(err) } fmt.Println(p2) // 輸出: {Tom 18}
在以上示例中,我們在struct的字段后面添加了一個`json`注解,指定了序列化/反序列化后的key名稱。如果沒有添加注解,那么默認的key名稱就是字段的名稱。例如:
type Person struct { Name string Age int } p := Person{Name: "Tom", Age: 18} b, err := json.Marshal(p) if err != nil { fmt.Println(err) } fmt.Println(string(b)) // 輸出: {"Name":"Tom","Age":18}
同樣的,如果我們需要忽略某些字段,可以在`json`注解中添加`-`。
type Person struct { Name string `json:"name"` Age int `json:"-"` } p := Person{Name: "Tom", Age: 18} b, err := json.Marshal(p) if err != nil { fmt.Println(err) } fmt.Println(string(b)) // 輸出: {"name":"Tom"}
在以上示例中,我們忽略了`Age`字段,因此在序列化后的結果中不包含該字段。
上一篇mysql動態縱表變橫表
下一篇vue工程打包發布