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"}
