Go结构体序列化和反序列化


结构体序列化和反序列化事例

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM