json是一种轻量级的数据交换格式,有限提高数据在网络中的传输效率,易于阅读和编写数据,且易于生成key-value格式数据。
一:json数据的序列化举例
package mainimport ("fmt""encoding/json")//结构体变量序列化type Personal struct{Name stringAge intHobby string}func StructJson() {personal := Personal{Name : "louis",Age : 18,Hobby : "it",}//json.Marshal返回[]byte与errpersonal_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 mainimport ("fmt""encoding/json")//结构体变量序列化type Personal struct{Name stringAge intHobby string}func StructJson() {personal := Personal{Name : "louis",Age : 18,Hobby : "it",}//json.Marshal返回[]byte与errpersonal_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 mainimport ("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"}
Go之json数据
原文地址:https://www.cnblogs.com/louis181214/p/10317581.html