go json
json 是一种轻量级的数据交换格式
json易于机器解析和生成,并有效的提升网络传输效率,通常程序在网络传输时会先将数据(j结构体,map)等序列化成json字符串,到接收方得到json字符串时,再反序列化恢复成原来的数据类型(结构体,map等 )
json数据在线解析
https://www.json.cn/网站可以验证一个json格式的数据是否正确。尤其是我们编写比较复杂的json格式数据,很有用。
package main import ( "encoding/json" "fmt" ) //定义一个结构体 type Monster struct{ Name string Age int Birthday string Sal float64 Skill string } func testStruct(){ //演示 monster :=Monster{ Name :"小乔", Age :500, Birthday: "2020-11-11", Sal: 8000.0, Skill:"治愈微笑", } //将monster序列化 data,err :=json.Marshal(&monster) if err!=nil{ fmt.Printf("序列号错误,err=%v\n",err) } //输出序列号后的结果 fmt.Printf("monster序列化后=%v\n",string(data)) } func testMap(){ //定义一个map var a map[string]interface{} //使用map,需要make a=make(map[string]interface{}) a["name"]="华晨宇" a["age"]=18 a["address"]="湖北十堰" //将a这个map进行序列化 //将monster序列化 data,err:=json.Marshal(a) if err!=nil{ fmt.Printf("序列化错误 err=%v\n",err) } //输出序列化后的结果 fmt.Printf("a map 序列化后=%v\n",string(data)) } func testSlice(){ var slice []map[string]interface{} var ml map[string]interface{} //使用map前,需要先make ml=make(map[string]interface{}) ml["name"]="jack" ml["age"]="7" ml["address"]="北京" slice=append(slice,ml) var m2 map[string]interface{} //使用map前,需要先make m2=make(map[string]interface{}) m2["name"]="tom" m2["age"]="20" m2["address"]=[2]string{"黑龙江","杭州"} slice=append(slice,m2) //对切片进行操作 data,err :=json.Marshal(slice) if err!=nil{ fmt.Printf("序列化错误 err=%v\n",err) } //输出序列化后的结果 fmt.Printf("slice 序列化后=%v\n",string(data)) } //对基本数据类型序列化,对基本数据类型进行序列化意义不大 func testFloat64(){ var numl float64 = 2345.66 //对numl进行序列化 data,err :=json.Marshal(numl) if err!=nil{ fmt.Printf("序列化错误 err=%v\n",err) } //输出序列化后的结果 fmt.Printf("slice 序列化后=%v\n",string(data)) } func unmarshalStruct(){ str :="{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2020-11-11\",\"Sal\":8000,\"Skill\":\"牛魔王\"}" //定义一个Monster实例 var monster Monster err :=json.Unmarshal([]byte(str),&monster) if err!=nil{ fmt.Printf("unmarshal err=%v\n",err) } fmt.Printf("反序列化后monster=%v monster.Name=%v\n",monster,monster.Name) } func main(){ //演示将结构体,map,切片进行序列化 testStruct() testMap() testSlice()//对切片序列化 testFloat64()//对基本数据类型序列化 unmarshalStruct() }