json是一种轻量级的数据交换格式,有限提高数据在网络中的传输效率,易于阅读和编写数据,且易于生成key-value格式数据。
一:json数据的序列化举例
package main import ( "fmt" "encoding/json" ) //结构体变量序列化 type Personal struct{ Name string Age int Hobby string } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } //json.Marshal返回[]byte与err personal_json, _:= json.Marshal(personal) //由于personal_json是[]byte数据类型,故要通过string()函数转换 fmt.Printf("personal_json=%v\n", string(personal_json)) } //map数据序列化 func MapJson(){ m := map[string]interface{}{ "Address":"深圳", "Phone":"12345678911", "Salary":10000, } map_json, _ := json.Marshal(m) fmt.Printf("map_json=%v\n", string(map_json)) } //切片序列化 func SliceJson(){ s := []int{1,2,3,4,5,6,7,8} slice_json, _ := json.Marshal(s) fmt.Printf("slice_json=%v\n", string(slice_json)) } //基本数据类型序列化 func Base() { str := "string" base_json, _ := json.Marshal(str) fmt.Printf("base_json=%v\n", string(base_json)) } func main() { StructJson() MapJson() SliceJson() Base() } 结果 [ `go run json.go` | done ] personal_json={"Name":"louis","Age":18,"Hobby":"it"} map_json={"Address":"深圳","Phone":"12345678911","Salary":10000} slice_json=[1,2,3,4,5,6,7,8] base_json="string"
二:json反序列化
package main import ( "fmt" "encoding/json" ) //结构体变量序列化 type Personal struct{ Name string Age int Hobby string } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } //json.Marshal返回[]byte与err personal_json, _:= json.Marshal(personal) //由于personal_json是[]byte数据类型,故要通过string()函数转换 fmt.Printf("personal_json=%v\n", string(personal_json)) var personal_data Personal //接受的变量必须为指针类型 err := json.Unmarshal([]byte(personal_json), &personal_data) if err != nil { fmt.Printf("反序列化错误:%v\n", err) } fmt.Printf("personal_json反序列化=%v\n", personal_data) } func main() { StructJson() } 结果 [ `go run json.go` | done ] personal_json={"Name":"louis","Age":18,"Hobby":"it"} personal_json反序列化={louis 18 it}
三:结构体的序列化的反射机制
当结构体定义的字段为大写字母开头,但客户端希望接受到的都是小写字母的字段时,可以使用反射机制
package main import ( "fmt" "encoding/json" ) //结构体变量序列化 type Personal struct{ Name string `json:"name"` Age int `json:"age"` Hobby string `json:"hobby_data"` } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } personal_json, _:= json.Marshal(personal) fmt.Printf("personal_json=%v\n", string(personal_json)) } func main() { StructJson() } 结果 [ `go run json.go` | done ] personal_json={"name":"louis","age":18,"hobby_data":"it"}
原文地址:https://www.cnblogs.com/louis181214/p/10317581.html
时间: 2024-11-14 01:29:36