golang json措置惩罚惩罚
1)简单的数据布局:
package main import ( "encoding/json" "fmt" "reflect" ) type School struct { Name string `json:"name"` Location string `json:"location"` } func main() { school := School{ Name: "某某学校", Location: "市区", } str, err := json.Marshal(school) if err !=nil { fmt.Printf("json序列化掉败%v", err) } fmt.Println(str) //返回功效[123 34 110 97 109 101 34 58 34 230 159 144 230 159 144 229 173 166 230 160 161 34 44 34 108 111 99 97 116 105 111 110 34 58 34 229 184 130 229 140 186 34 125] fmt.Println(reflect.TypeOf(str)) //返回功效[]uint8 fmt.Println(string(str)) //返回功效{"name":"某某学校","location":"市区"} }
解释一下demo中最后为什么要颠末string转换一个才华打印出最后的功效:json.Marshal最后返回的功效是byte类型的切片功效,byte和string是可以彼此转换的。
2)布局体嵌套:
package main import ( "encoding/json" "fmt" ) type Classroom struct { Number int64 `json:"number"` Floor int32 `json:"floor"` } type School struct { Name string `json:"name"` Location string `json:"location"` Classroom Classroom `json:"classroom"` } func main() { school := School{ Name: "某某学校", Location: "市区", Classroom:Classroom{ Number: 201, Floor: 2, }, } str, err := json.Marshal(school) if err !=nil { fmt.Printf("json序列化掉败%v", err) } fmt.Println(string(str)) //返回功效 {"name":"某某学校","location":"市区","classroom":{"number":201,"floor":2}} }
school中嵌套一个classroom的布局体,初始化赋值后便可以直接序列化。
3)不界说布局体的做法:
package main import ( "encoding/json" "fmt" ) func main() { school := map[string]interface{}{ "name" : "某某学校", "location" : "市区", "classroom" : map[string]interface{}{ "number" : 201, "floor" : 2, }, } str, err := json.Marshal(school) if err !=nil { fmt.Printf("json序列化掉败%v", err) } fmt.Println(string(str)) //返回功效 {"name":"某某学校","location":"市区","classroom":{"number":201,"floor":2}} }
可以直接初始化赋值后序列化。
反序列化
1)简单布局:
package main import ( "encoding/json" "fmt" ) type Classroom struct { Number int64 `json:"number"` Floor int32 `json:"floor"` } type School struct { Name string `json:"name"` Location string `json:"location"` Classroom Classroom `json:"classroom"` } func main() { str := `{"name":"某某学校","location":"市区","classroom":{"number":201,"floor":2}}` var school School json.Unmarshal([]byte(str), &school) //func Unmarshal(data []byte, v interface{}) error { fmt.Println(school) //返回功效 {某某学校 市区 {201 2}} fmt.Printf(`name:%s, location:%s, classroom:%v, number:%d, floor:%d`, school.Name, school.Location, school.Classroom, school.Classroom.Number, school.Classroom.Floor) //name:某某学校, location:市区, classroom:{201 2}, number:201, floor:2 }
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30077.html