package main
import("encoding/json""fmt")type Student struct{
ID int
Name string
Sex string}funcmain(){var s1 = Student{
ID:1,
Name:"zhangsan",
Sex:"man",}
fmt.Printf("%#v \n",s1)//main.Student{ID:1, Name:"zhangsan", Sex:"man"}
jsonByte,_:= json.Marshal(s1)
jsonStr :=string(jsonByte)
fmt.Printf("%v",jsonStr)//{"ID":1,"Name":"zhangsan","Sex":"man"}}
1.2 json转换成结构体
package main
import("encoding/json""fmt")type Student struct{
ID int
Name string//如果是小写,是私有字段,不能被json包访问
Sex string}funcmain(){//2.json转结构体var str =`{"ID":12,"Name":"zhangsan","Sex":"man"}`//``进行转义var s1 Student
err := json.Unmarshal([]byte(str),&s1)if err !=nil{
fmt.Println(err)}
fmt.Printf("%#v \n",s1)//main.Student{ID:12, Name:"zhangsan", Sex:"man"}}
2. 嵌套结构体和json的相互转换
2.1 嵌套结构体–>json
package main
import("encoding/json""fmt")type Stu struct{
ID int
Name string
Sex string}type Class struct{
Tiele string
Stud []Stu //结构体嵌套Stu结构体}funcmain(){
c :=Class{
Tiele:"001班",
Stud:make([]Stu,0),}for i:=1;i<=3;i++{
s := Stu{
ID: i,
Name: fmt.Sprintf("stu_%v",i),
Sex:"man",}
c.Stud =append(c.Stud,s)}//fmt.Println(c)
strByte,err := json.Marshal(c)if err !=nil{
fmt.Println(err)}else{
strc :=string(strByte)
fmt.Printf("%v",strc)//{"Tiele":"001班","Stud":[{"ID":1,"Name":"stu_1","Sex":"man"},{"ID":2,"Name":"stu_2","Sex":"man"},{"ID":3,"Name":"stu_3","Sex":"man"}]}}}
2.2 复杂json转结构体
package main
import("encoding/json""fmt")type Stu struct{
ID int
Name string
Sex string}type Class struct{
Tiele string
Stud []Stu
}funcmain(){var str =`{"Tiele":"001班","Stud":[{"ID":1,"Name":"stu_1","Sex":"man"},{"ID":2,"Name":"stu_2","Sex":"man"},{"ID":3,"Name":"stu_3","Sex":"man"}]}`var c =&Class{}
err := json.Unmarshal([]byte(str),c)if err !=nil{
fmt.Println(err)}else{
fmt.Printf("%#v",c)//&main.Class{Tiele:"001班", Stud:[]main.Stu{main.Stu{ID:1, Name:"stu_1", Sex:"man"}, main.Stu{ID:2, Name:"stu_2", Sex:"man"}, main.Stu{ID:3, Name:"stu_3", Sex:"man"}}}}}