1. // json.go.go
    2. package main
    3. import (
    4. "encoding/json"
    5. "fmt"
    6. "log"
    7. "os"
    8. )
    9. type Address struct {
    10. // 用tag标记的变量,名字必须是可导出的
    11. Type string `json:"type"`
    12. City string `json:"city"`
    13. Country string `json:"country"`
    14. }
    15. type Person struct {
    16. Name string `json:"name"`
    17. Age int `json:"age"`
    18. }
    19. type VCard struct {
    20. FirstName string `json:"firstname"`
    21. LastName string `json:"lastname"`
    22. // 若要在被嵌套结构体整体为空时使其在序列化结果中被忽略,
    23. // 不仅要在被嵌套结构体字段后加上json:"fileName,omitempty",
    24. // 还要将其改为结构体指针
    25. Addresses []*Address `json:"address"`
    26. // tag里面加上omitempy,可以在序列化的时候忽略0值或者空值。
    27. Remark string `json:"remark,omitempty"`
    28. }
    29. func main() {
    30. pa := &Address{"private", "Aartselaar", "Belgium"}
    31. wa := &Address{"work", "Boom", "Belgium"}
    32. vc := VCard{"Jan", "Kersschot", []*Address{pa, wa}, ""}
    33. // fmt.Printf("%v: \n", vc) // {Jan Kersschot [0x126d2b80 0x126d2be0] none}:
    34. // JSON format:
    35. js, _ := json.Marshal(vc)
    36. fmt.Printf("JSON format: %s", js)
    37. // using an encoder:
    38. file, _ := os.OpenFile("vcard.json", os.O_CREATE|os.O_WRONLY, 0)
    39. defer file.Close()
    40. enc := json.NewEncoder(file)
    41. err := enc.Encode(vc)
    42. if err != nil {
    43. log.Println("Error in encoding json")
    44. }
    45. }