Encodejson
將一個對象編碼成 JSON 數據,接受一個 interface{} 對象,返回 []byte 和 err數組
func Marshal(v interface{}) {[]byte,err}
Marshal 函數將會遞歸遍歷整個對象,依次按照成員類型對這個對象進行編碼,類型轉換以下:函數
1 bool 類型轉換成 JSON 的 boolean編碼
2 整數、浮點數等數值類型轉換成 JSON 的 Numbercode
3 string 轉換成 JSON 的字符串(帶 "" 號)對象
4 struct 轉換成 JSON 的 Object ,再根據各個成員的類型遞歸打包blog
5 數組或切片轉換成 JSON 的 Array遞歸
6 []byte 會先進行 base64 編碼而後轉換成 JSON 字符串rem
7 map 轉換成 JSON 的 Object ,key 必須是 string字符串
8 interface{} 按照內部的實際類型進行轉換
9 channel、func等類型,會返回 UnsupportedTypeError
以下示例:
package main import ( "encoding/json" "fmt" "os" ) // 定義一個結構體 type ColorGroup struct { ID int Name string Colors []string } func main() { group := ColorGroup{ ID : 1, Name : "Reds", Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b,err := json.Marshal(group) if err != nil{ fmt.Println("error:",err) } os.Stdout.Write(b) } ---------------------------------------------------------------------------- 輸出結果: {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
Decode
將 JSON 數據解碼
func Unmarshal(data []byte,v interface{}) error
類型轉換規則和上面的規則相似,以下示例:
package main import ( "encoding/json" "fmt" ) // func UnMarshal(data []byte,v interface{}) error type Animal struct { Name string Order string } func main() { var animals []Animal jsonBlob := `[ {"Name" : "Platypus","Order" : "Monotremata"}, {"Name": "Quoll", "Order": "Dasyuromorphia"} ]` err := json.Unmarshal([]byte(jsonBlob),&animals) if err != nil { fmt.Println("error:",err) } fmt.Println(animals) } ------------------------------------------------------------------ 輸出結果: [{Platypus Monotremata} {Quoll Dasyuromorphia}]