package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意這里的成員變量的名字首字母必須是大寫 Company string Subjects []string Isok bool Price float64 } func main() { s := IT{"zyg", []string{"go", "python", "java"}, true, 3.14}//json的初始化 buf, err := json.Marshal(s)//使用這個函數會返回兩個值,通過源碼得知 if err != nil { fmt.Println("err = ", err) return } fmt.Println("buf = ", string(buf)) //注意這里生成的buf是一個byte切片,如果直接打印會是一串數字,這里使用string函數進行轉化 }
執行的結果為
buf = {"Company":"zyg","Subjects":["go","python","java"],"Isok":true,"Price":3.14}
這樣可讀性不太好,如果用於展示可以使用這個函數
buf, err := json.MarshalIndent(s, "", " ")
執行的結果就會好看一些
buf = { "Company": "zyg", "Subjects": [ "go", "python", "java" ], "Isok": true, "Price": 3.14 }
當然這樣的結果對於開發數據交換里可以會有問題,比如在Isok那一欄里就有可能別人需要的是“true",而不是true,那這樣就可以使用_struct_tag方式
將結構體變更為這樣的方式
type IT struct { Company string `json:"-"` //這樣的方式可以讓這個頭不顯示 Subjects []string `json:"subjects"` //這種方式二次編碼 Isok bool `json:",string"` //將一欄的值顯示為string類型 Price float64 }
執行的結果為
buf = { "subjects": [ //這里變更為小寫了 "go", "python", "java" ], "Isok": "true", //這里變更為字符串了 "Price": 3.14 } company也沒有再顯示了
