結構體序列化和反序列化事例
func Marshal(in interface{}) (out []byte, err error) func Unmarshal(p []byte, v interface{}) error 注意事項 1,結構體的私有字段(小寫字段不會被編解碼) 2,json tag,struct字段中的別名 3,json 對象的 key 必須是字符串 4,解碼Unmarshal傳遞的字段是指針
簡單的字符串序列化
package main import ( "encoding/json" "fmt" ) func main() { var x = 10 var name = "xiaoming" var b = true json_str1, _ := json.Marshal(x) json_str2, _ := json.Marshal(name) json_str3, _ := json.Marshal(b) fmt.Printf("%#v\n", string(json_str1)) fmt.Printf("%#v\n", string(json_str2)) fmt.Printf("%#v\n", string(json_str3)) } 結果 "10" "\"xiaoming\"" "true"
結構體序列化
package main import ( "encoding/json" "fmt" ) type addr struct { Province string City string } type stu struct { Name string `json:"name"` Age int Addr addr } func main() { var stu01 = stu{Name: "xiaoxiao", Age: 18, Addr: addr{Province: "hehe", City: "beijing"}} json_str02, _ := json.Marshal(stu01) fmt.Printf("%#v", string(json_str02)) } 結果 "{\"name\":\"xiaoxiao\",\"Age\":18,\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
隱私字段
結構體中字段大寫開頭表示可公開訪問,小寫表示私有(僅在定義當前結構體的包中可訪問)
package main import ( "encoding/json" "fmt" ) type addr struct { Province string City string } type stu struct { name string //隱私字段,結果不顯示 age int //隱私字段,結果不顯示 Addr addr } func main() { var stu01 = stu{name: "xiaoxiao", age: 18, Addr: addr{Province: "hehe", City: "beijing"}} json_str02, _ := json.Marshal(stu01) fmt.Printf("%#v", string(json_str02)) } 結果(小寫字段不顯示) "{\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
結構體標簽
package main import ( "encoding/json" "fmt" ) type addr struct { Province string City string } type stu struct { Name string `json:"aaa"` //tag標簽 Age int `json:"bbb"` //指定標簽 Addr addr } func main() { var stu01 = stu{Name: "xiaoxiao", Age: 18, Addr: addr{Province: "hehe", City: "beijing"}} json_str02, _ := json.Marshal(stu01) fmt.Printf("%#v", string(json_str02)) } 結果 "{\"aaa\":\"xiaoxiao\",\"bbb\":18,\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
反序列化
package main import ( "encoding/json" "fmt" ) type addr struct { Province string City string } type stu struct { Name string `json:"aaa"` Age int Addr addr } func main() { var data = `{"aaa":"xiaoxiao","Age":18,"Addr":{"Province":"hehe","City":"beijing"}}` var stu02 stu json.Unmarshal([]byte(data), &stu02) fmt.Printf("%#v", stu02) } 結果 main.stu{Name:"xiaoxiao", Age:18, Addr:main.addr{Province:"hehe", City:"beijing"}}