【发布时间】:2022-01-07 21:10:08
【问题描述】:
type MiddleMan struct {
User CompletedByUser `json:"user"`
}
type CompletedByUser struct {
DisplayName string `json:"displayName"`
Id string `json:"id"`
}
使用以下类型,我运行代码
shorterJsonString := `{
"user":{
"displayName":null,
"id":"a03dfee5-a754-4eb9"
}
}`
if !json.Valid([]byte(shorterJsonString)) {
log.Println("Not valid")
}
var middleMan models.MiddleMan
newReader := strings.NewReader(shorterJsonString)
json.NewDecoder(newReader).Decode(&middleMan)
log.Println(middleMan)
不幸的是,嵌套对象的解码器似乎被破坏了。打印出来的不是实际的物体,而是打印出来
{{ a03dfee5-a754-4eb9 }}
它似乎将整个事物展平到 id 字段中。这是怎么回事?
【问题讨论】:
-
您正在打印的
middleMan的类型为models.MiddleMan。它与 JSON 无关,因此将接收来自log.Println的 fmt 样式格式,它喜欢省略字段名称以及空字段。您可以使用log.Printf("%+v\n", middleMan)让它稍微冗长一些。你想完成什么?