Go語言結構體轉json的坑
標簽(空格分隔): go
json.Marshal()
JSON輸出的時候必須注意,只有導出的字段(首字母是大寫)才會被輸出,如果修改字段名,那么就會發現什么都不會輸出,所以必須通過struct tag定義來實現。
針對JSON的輸出,我們在定義struct tag的時候需要注意的幾點是:
- 字段的tag是"-",那么這個字段不會輸出到JSON
- tag中帶有自定義名稱,那么這個自定義名稱會出現在JSON的字段名中
- tag中如果帶有"omitempty"選項,那么如果該字段值為空,就不會輸出到JSON串中
- 如果字段類型是bool, string, int, int64等,而tag中帶有",string"選項,那么這個字段在輸出到JSON的時候會把該字段對應的值轉換成JSON字符串
代碼示例
package main
import (
"encoding/json"
"fmt"
)
func main() {
type UserInfo struct {
Id int
Name string
Address string
}
type Comiket struct {
id int
title string
}
type Test struct {
Id int `json:"-"`
Content string `json:"content"`
IsDel bool `json:",string"`
Type int `json:"type, omitempty"`
}
c := Comiket{1, "AS動漫游戲嘉年華"}
v, error := json.Marshal(c)
fmt.Println(string(v))
fmt.Println(error)
fmt.Println("------------------")
User := UserInfo{1, "taylor", "USA"}
b, err := json.Marshal(User)
fmt.Println(string(b))
fmt.Println(err)
fmt.Println("------------------")
t := Test{Id:1, Content:"hello world", IsDel:true}
val, _ := json.Marshal(t)
fmt.Println(string(val))
}

