数据结构要在网络中传输或保存到文件,就必须对其编码和解码;目前存在很多编码格式:JSON,XML,gob,Google 缓冲协议等等。Go 语言支持所有这些编码格式;在后面的章节,我们将讨论前三种格式。
JSON 数据格式
Go 语言的 json
包可以让你在程序中方便的读取和写入 JSON 数据。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package main
import ( "encoding/json" "fmt" "log" "os" )
type Address struct { Type string City string Country string }
type VCard struct { FirstName string LastName string Addresses []*Address Remark string }
func main() { pa := &Address{"private", "Aartselaar", "Belgium"} wa := &Address{"work", "Boom", "Belgium"} vc := VCard{"Jan", "Kersschot", []*Address{pa, wa}, "none"} js, _ := json.Marshal(vc) fmt.Printf("JSON format: %s", js) file, _ := os.OpenFile("vcard.json", os.O_CREATE|os.O_WRONLY, 0666) defer file.Close() enc := json.NewEncoder(file) err := enc.Encode(vc) if err != nil { log.Println("Error in encoding json") } }
|
json.Marshal()
的函数签名是 func Marshal(v interface{}) ([]byte, error)
,下面是数据编码后的 JSON 文本(实际上是一个 []byte
):
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "FirstName": "Jan", "LastName": "Kersschot", "Addresses": [{ "Type": "private", "City": "Aartselaar", "Country": "Belgium" }, { "Type": "work", "City": "Boom", "Country": "Belgium" }], "Remark": "none" }
|
出于安全考虑,在 web 应用中最好使用 json.HTMLEscape()
函数,其对数据执行HTML转码,所以文本可以被安全地嵌在 HTML