// json.go.gopackage mainimport ( "encoding/json" "fmt" "log" "os")type Address struct { // 用tag标记的变量,名字必须是可导出的 Type string `json:"type"` City string `json:"city"` Country string `json:"country"`}type Person struct { Name string `json:"name"` Age int `json:"age"`}type VCard struct { FirstName string `json:"firstname"` LastName string `json:"lastname"` // 若要在被嵌套结构体整体为空时使其在序列化结果中被忽略, // 不仅要在被嵌套结构体字段后加上json:"fileName,omitempty", // 还要将其改为结构体指针 Addresses []*Address `json:"address"` // tag里面加上omitempy,可以在序列化的时候忽略0值或者空值。 Remark string `json:"remark,omitempty"`}func main() { pa := &Address{"private", "Aartselaar", "Belgium"} wa := &Address{"work", "Boom", "Belgium"} vc := VCard{"Jan", "Kersschot", []*Address{pa, wa}, ""} // fmt.Printf("%v: \n", vc) // {Jan Kersschot [0x126d2b80 0x126d2be0] none}: // JSON format: js, _ := json.Marshal(vc) fmt.Printf("JSON format: %s", js) // using an encoder: file, _ := os.OpenFile("vcard.json", os.O_CREATE|os.O_WRONLY, 0) defer file.Close() enc := json.NewEncoder(file) err := enc.Encode(vc) if err != nil { log.Println("Error in encoding json") }}