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