JSON(JavaScript Object Notation)
是一種輕量級的數據交換格式,如今是主流的數據格式,經常使用於web
開發中前端與後端進行數據交互的一種方式前端
go
中常見的幾種序列化成json
的方式一、將結構體序列化成json
web
package main import ( "encoding/json" "fmt" ) type Student struct { Name string `json:"name"` // 姓名 Age int `json:"age"` // 年齡 Gender string `json:"gender"` // 性別 Score float64 `json:"score"` // 分數 Course []string `json:"course"` // 課程 } func main() { stu := Student{ "張三", 20, "男", 78.6, []string{"語文", "數學", "音樂"}, } fmt.Println(stu) data, err := json.Marshal(&stu) if err != nil { fmt.Println("序列化錯誤", err) } else { fmt.Println(string(data)) } } // 返回結果:{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}
二、將map
序列化爲json
json
package main import ( "encoding/json" "fmt" ) func main() { var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型 map1 = make(map[string]interface{}) map1["name"] = "張三" map1["province"] = "廣東省" map1["city"] = "深圳市" map1["salary"] = 1000 map1["hobby"] = [...]string{"看書", "旅遊", "學習"} data, err := json.Marshal(map1) if err != nil { fmt.Println("序列化失敗") } else { fmt.Println(string(data)) } }
三、切片序列化成json
後端
package main import ( "encoding/json" "fmt" ) func main() { var slice1 []map[string]interface{} var m1 map[string]interface{} m1 = make(map[string]interface{}) m1["name"] = "張三" m1["address"] = "廣東省深圳市" slice1 = append(slice1, m1) var m2 map[string]interface{} m2 = make(map[string]interface{}) m2["name"] = "李四" m2["address"] = "廣東省廣州市" slice1 = append(slice1, m2) data, err := json.Marshal(slice1) if err != nil { fmt.Println("序列化錯誤") } else { fmt.Println(string(data)) } }
json
轉換爲go
代碼能識別的結構體、map
、切片)一、json
反序列化成結構體markdown
package main import ( "encoding/json" "fmt" ) type Student struct { Name string `json:"name"` // 姓名 Age int `json:"age"` // 年齡 Gender string `json:"gender"` // 性別 Score float64 `json:"score"` // 分數 Course []string `json:"course"` // 課程 } func main() { var stu Student str := `{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}` err := json.Unmarshal([]byte(str), &stu) if err != nil { fmt.Println("反序列化失敗") } fmt.Println(stu) }
二、json
反序列化成map
app
package main import ( "encoding/json" "fmt" ) func main() { var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型 //map1 = make(map[string]interface{}) str := `{"city":"深圳市","hobby":["看書","旅遊","學習"],"name":"張三","province":"廣東省","salary":1000}` err := json.Unmarshal([]byte(str), &map1) if err != nil { fmt.Println("反序列化失敗", err) } fmt.Println(map1) }
三、切片反序列化ide
package main import ( "encoding/json" "fmt" ) func main() { var slice []map[string]interface{} str := `[{"address":"廣東省深圳市","name":"張三"},{"address":"廣東省廣州市","name":"李四"}]` err := json.Unmarshal([]byte(str), &slice) if err != nil { fmt.Printf("unmarshal err=%v\n", err) } fmt.Printf("反序列化後 slice=%v\n", slice) }