golang中包含匿名字段的结构体在解析和序列化(json.Unmarshal和json.Marshal)的时候:
如果对匿名字段指定了解析说明`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"}
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小时内删除。
留言与评论(共有 0 条评论) |