// json.go.go
package main
import (
"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")
}
}