go json序列化与反序列化

package main

import (
	"encoding/json"
	"fmt"
)

type Student struct{
	Id string
	Name string
	Sex string
}

type Class struct{
	Count int
	Name string
	Students []*Student
}


var  rowJson = `{
	"Count":0,
	"Name":"101",
	"Students":[
		{"Id":"0","Name":"stu0","Sex":"man"},
		{"Id":"1","Name":"stu1","Sex":"man"},
		{"Id":"2","Name":"stu2","Sex":"man"},
		{"Id":"3","Name":"stu3","Sex":"man"},
		{"Id":"4","Name":"stu4","Sex":"man"},
		{"Id":"5","Name":"stu5","Sex":"man"},
		{"Id":"6","Name":"stu6","Sex":"man"},
		{"Id":"7","Name":"stu7","Sex":"man"},
		{"Id":"8","Name":"stu8","Sex":"man"},
		{"Id":"9","Name":"stu9","Sex":"man"}
	]
}`

func main() {
	c := &Class{
		Name :"101",
		Count :0,
	}
	for i := 0; i < 10; i++ {
		stu:= &Student{
			Name: fmt.Sprintf("stu%d",i),
			Sex: "man",
			Id: fmt.Sprintf("%d",i),
		}
		c.Students = append(c.Students,stu)
	}
	data,err := json.Marshal(c)  // 结构体序列化为字符串
	fmt.Printf("你好啊 json marshal %s \n >>> %T ----- \n",data,data)
	if err != nil {
		fmt.Println("json marshal failed")
		return 
	}
	fmt.Printf("这是json:%s\n",string(data))
	fmt.Printf("这是[]uint8:%s\n",data)

	// json 反序列化
	fmt.Println("unmarshalresultis\n\n")
	var c1 *Class= &Class{}
	err = json.Unmarshal([]uint8(rowJson),c1)
	fmt.Printf("+++++++++++++++++++:%s\n",err)
	if err != nil{
		fmt.Println("unmarhsal failed")
		return
	}
	fmt.Printf("c1:%#v\n",c1)
	for _,v := range c1.Students{
		fmt.Printf("stu:%#v\n",v)
	}
}

序列化和反序列化:

你好啊 json marshal {"Count":0,"Name":"101","Students":[{"Id":"0","Name":"stu0","Sex":"man"},{"Id":"1","Name":"stu1","Sex":"man"},{"Id":"2","Name":"stu2","Sex":"man"},{"Id":"3","Name":"stu3","Sex":"man"},{"Id":"4","Name":"stu4",
"Sex":"man"},{"Id":"5","Name":"stu5","Sex":"man"},{"Id":"6","Name":"stu6","Sex":"man"},{"Id":"7","Name":"stu7","Sex":"man"},{"Id":"8","Name":"stu8","Sex":"man"},{"Id":"9","Name":"stu9","Sex":"man"}]}
 >>> []uint8 -----
这是json:{"Count":0,"Name":"101","Students":[{"Id":"0","Name":"stu0","Sex":"man"},{"Id":"1","Name":"stu1","Sex":"man"},{"Id":"2","Name":"stu2","Sex":"man"},{"Id":"3","Name":"stu3","Sex":"man"},{"Id":"4","Name":"stu4","Sex":"man"
},{"Id":"5","Name":"stu5","Sex":"man"},{"Id":"6","Name":"stu6","Sex":"man"},{"Id":"7","Name":"stu7","Sex":"man"},{"Id":"8","Name":"stu8","Sex":"man"},{"Id":"9","Name":"stu9","Sex":"man"}]}
这是[]uint8:{"Count":0,"Name":"101","Students":[{"Id":"0","Name":"stu0","Sex":"man"},{"Id":"1","Name":"stu1","Sex":"man"},{"Id":"2","Name":"stu2","Sex":"man"},{"Id":"3","Name":"stu3","Sex":"man"},{"Id":"4","Name":"stu4","Sex":"m
an"},{"Id":"5","Name":"stu5","Sex":"man"},{"Id":"6","Name":"stu6","Sex":"man"},{"Id":"7","Name":"stu7","Sex":"man"},{"Id":"8","Name":"stu8","Sex":"man"},{"Id":"9","Name":"stu9","Sex":"man"}]}
unmarshalresultis


+++++++++++++++++++:%!s(<nil>)
c1:&main.Class{Count:0, Name:"101", Students:[]*main.Student{(*main.Student)(0xc0000b8840), (*main.Student)(0xc0000b8870), (*main.Student)(0xc0000b88a0), (*main.Student)(0xc0000b88d0), (*main.Student)(0xc0000b8930), (*main.Stude
nt)(0xc0000b8960), (*main.Student)(0xc0000b8990), (*main.Student)(0xc0000b89c0), (*main.Student)(0xc0000b89f0), (*main.Student)(0xc0000b8a20)}}
stu:&main.Student{Id:"0", Name:"stu0", Sex:"man"}
stu:&main.Student{Id:"1", Name:"stu1", Sex:"man"}
stu:&main.Student{Id:"2", Name:"stu2", Sex:"man"}
stu:&main.Student{Id:"3", Name:"stu3", Sex:"man"}
stu:&main.Student{Id:"4", Name:"stu4", Sex:"man"}
stu:&main.Student{Id:"5", Name:"stu5", Sex:"man"}
stu:&main.Student{Id:"6", Name:"stu6", Sex:"man"}
stu:&main.Student{Id:"7", Name:"stu7", Sex:"man"}
stu:&main.Student{Id:"8", Name:"stu8", Sex:"man"}
stu:&main.Student{Id:"9", Name:"stu9", Sex:"man"}

#对不是本类型的,序列化为他类型的默认值,而不是强制类型转换

package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Score string
}

func testStruct() {
	stu := &Student{
		Name:  "lili",
		Age:   11,
		Score: "11.11",
	}
	data, err := json.Marshal(stu)
	if err != nil {
		fmt.Printf("json.marshal failed, err:", err)
		return
	}

	fmt.Println(string(data))

	var stu1 Student
	// 第二个参数记得传地址
	json.Unmarshal(data, &stu1)
	fmt.Printf("00 > stu1=%#v\n",stu1)
	data1 := `{"name":223.23,"age":1122,"Score": "11.11"}`
	var stu2 Student
	json.Unmarshal([]byte(data1), &stu2)
	fmt.Printf("01 > stu2=%#v\n",stu2)
}

func main() {
	testStruct()
}

输出:

{"name":"lili","age":11,"Score":"11.11"}
00 > stu1=main.Student{Name:"lili", Age:11, Score:"11.11"}
01 > stu2=main.Student{Name:"", Age:1122, Score:"11.11"}
posted @ 2022-03-18 23:37  ty1539  阅读(117)  评论(0编辑  收藏  举报