golang 匿名字段解析和序列化问题

阅读: 评论:0

golang 匿名字段解析和序列化问题

golang 匿名字段解析和序列化问题

说明:

golang中包含匿名字段的结构体在解析和序列化(json.Unmarshal和json.Marshal)的时候:

如果对匿名字段指定了解析说明`json:""`,就会变成带层级的字符数组。

如果没指定解析说明,则会平铺。

例子:

匿名字段不加解析说明`json""`,就是和平铺的字符串相互转化 

和平铺的字符串互相转化成功:

package mainimport ("encoding/json""fmt"
)func main()  {initStr := []byte(`{"father_str":"i am father","son_int":3,"son_str":"i am son"}`)father := &Father{}err := json.Unmarshal(initStr, father)if err != nil {fmt.Println(err)return}fmt.Println(father)newStr, err := json.Marshal(father)if err != nil {fmt.Println(err)return}fmt.Println(string(newStr))
}type Father struct {SonFatherStr	string `json:"Father_str"`
}type Son struct {SonStr	string 		`json:"son_str"`SonStrInt	int		`json:"son_int"`
}
&{{i am son 3} i am father}
{"son_str":"i am son","son_int":3,"Father_str":"i am father"}

带层级的字符串转化失败

package mainimport ("encoding/json""fmt"
)func main()  {//initStr := []byte(`{"father_str":"i am father","son_int":3,"son_str":"i am son"}`)initStr := []byte(`{"son":{"son_int":3,"son_str":"i am son"},"father_str":"i am father"}`)father := &Father{}err := json.Unmarshal(initStr, father)if err != nil {fmt.Println(err)return}fmt.Println(father)newStr, err := json.Marshal(father)if err != nil {fmt.Println(err)return}fmt.Println(string(newStr))
}type Father struct {SonFatherStr	string `json:"Father_str"`
}type Son struct {SonStr	string 		`json:"son_str"`SonStrInt	int		`json:"son_int"`
}
&{{ 0} i am father}
{"son_str":"","son_int":0,"Father_str":"i am father"}

二、匿名字段加解析说明`json""`,就必须和带层级的字符串相互转化 

平铺的字符串转化失败

package mainimport ("encoding/json""fmt"
)func main()  {initStr := []byte(`{"father_str":"i am father","son_int":3,"son_str":"i am son"}`)father := &Father{}err := json.Unmarshal(initStr, father)if err != nil {fmt.Println(err)return}fmt.Println(father)newStr, err := json.Marshal(father)if err != nil {fmt.Println(err)return}fmt.Println(string(newStr))
}type Father struct {Son	`json:"son"`FatherStr	string `json:"Father_str"`
}type Son struct {SonStr	string 		`json:"son_str"`SonStrInt	int		`json:"son_int"`
}
&{{ 0} i am father}
{"son":{"son_str":"","son_int":0},"Father_str":"i am father"}

 和带层级的结构体互相转化成功

package mainimport ("encoding/json""fmt"
)func main()  {initStr := []byte(`{"son":{"son_int":3,"son_str":"i am son"},"father_str":"i am father"}`)father := &Father{}err := json.Unmarshal(initStr, father)if err != nil {fmt.Println(err)return}fmt.Println(father)newStr, err := json.Marshal(father)if err != nil {fmt.Println(err)return}fmt.Println(string(newStr))
}type Father struct {Son	`json:"son"`FatherStr	string `json:"Father_str"`
}type Son struct {SonStr	string 		`json:"son_str"`SonStrInt	int		`json:"son_int"`
}
&{{i am son 3} i am father}
{"son":{"son_str":"i am son","son_int":3},"Father_str":"i am father"}

 

本文发布于:2024-01-29 10:35:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170649571914673.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字段   序列化   golang
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23