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