Go語言有一個非常常用的編碼和解碼數據的標準庫叫做encoding/json, 它可以讓我們很方便地在Go語言和JSON數據之間進行轉換。
在使用encoding/json庫進行編碼之前,我們需要先定義數據結構,這樣就可以將Go語言數據轉換為JSON格式數據,詳見下面的例子。
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` Address *Address `json:"address,omitempty"` } type Address struct { Street string `json:"street,omitempty"` City string `json:"city,omitempty"` }
在上述代碼中, struct中的字段標簽 "json:..." 代表json包的解釋器如何將結構體寫入到或解釋自JSON數據。假如我們現在有一個Person實例。
p := Person{Name: "Tom", Age: 18, Email: "tom@example.com", Address: &Address{Street: "123 Main St", City: "Beijing"}}
下面,我們可以使用encoding/json將數據編碼成JSON數據。
data, err := json.Marshal(p) if err != nil { log.Fatal(err) } fmt.Println(string(data))
在上面的代碼中,我們使用json.Marshal函數將Person實例編碼成字節數組,然后通過string()函數將字節數組轉換成字符串并輸出。
當我們需要將JSON數據解碼成Go語言數據時,可以使用json.Unmarshal函數。例如:
jsonStr := `{"name":"Tom","age":18,"email":"tom@example.com","address":{"street":"123 Main St","city":"Beijing"}}` var p Person if err := json.Unmarshal([]byte(jsonStr), &p); err != nil { log.Fatal(err) } fmt.Printf("%+v", p)
在上面的代碼中,我們將一個JSON字符串轉換成了Person結構體實例。