結構體序列化和反序列化事例
func Marshal(in interface{}) (out []byte, err error)
func Unmarshal(p []byte, v interface{}) error
注意事項
1,結構體的私有字段(小寫字段不會被編解碼)
2,json tag,struct字段中的別名
3,json 對象的 key 必須是字符串
4,解碼Unmarshal傳遞的字段是指針

簡單的字符串序列化
package main
import (
"encoding/json"
"fmt"
)
func main() {
var x = 10
var name = "xiaoming"
var b = true
json_str1, _ := json.Marshal(x)
json_str2, _ := json.Marshal(name)
json_str3, _ := json.Marshal(b)
fmt.Printf("%#v\n", string(json_str1))
fmt.Printf("%#v\n", string(json_str2))
fmt.Printf("%#v\n", string(json_str3))
}
結果
"10"
"\"xiaoming\""
"true"
結構體序列化
package main
import (
"encoding/json"
"fmt"
)
type addr struct {
Province string
City string
}
type stu struct {
Name string `json:"name"`
Age int
Addr addr
}
func main() {
var stu01 = stu{Name: "xiaoxiao", Age: 18, Addr: addr{Province: "hehe", City: "beijing"}}
json_str02, _ := json.Marshal(stu01)
fmt.Printf("%#v", string(json_str02))
}
結果
"{\"name\":\"xiaoxiao\",\"Age\":18,\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
隱私字段
結構體中字段大寫開頭表示可公開訪問,小寫表示私有(僅在定義當前結構體的包中可訪問)
package main
import (
"encoding/json"
"fmt"
)
type addr struct {
Province string
City string
}
type stu struct {
name string //隱私字段,結果不顯示
age int //隱私字段,結果不顯示
Addr addr
}
func main() {
var stu01 = stu{name: "xiaoxiao", age: 18, Addr: addr{Province: "hehe", City: "beijing"}}
json_str02, _ := json.Marshal(stu01)
fmt.Printf("%#v", string(json_str02))
}
結果(小寫字段不顯示)
"{\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
結構體標簽
package main
import (
"encoding/json"
"fmt"
)
type addr struct {
Province string
City string
}
type stu struct {
Name string `json:"aaa"` //tag標簽
Age int `json:"bbb"` //指定標簽
Addr addr
}
func main() {
var stu01 = stu{Name: "xiaoxiao", Age: 18, Addr: addr{Province: "hehe", City: "beijing"}}
json_str02, _ := json.Marshal(stu01)
fmt.Printf("%#v", string(json_str02))
}
結果
"{\"aaa\":\"xiaoxiao\",\"bbb\":18,\"Addr\":{\"Province\":\"hehe\",\"City\":\"beijing\"}}"
反序列化
package main
import (
"encoding/json"
"fmt"
)
type addr struct {
Province string
City string
}
type stu struct {
Name string `json:"aaa"`
Age int
Addr addr
}
func main() {
var data = `{"aaa":"xiaoxiao","Age":18,"Addr":{"Province":"hehe","City":"beijing"}}`
var stu02 stu
json.Unmarshal([]byte(data), &stu02)
fmt.Printf("%#v", stu02)
}
結果
main.stu{Name:"xiaoxiao", Age:18, Addr:main.addr{Province:"hehe", City:"beijing"}}
