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.MiddleMannewReader := strings.NewReader(shorterJsonString)json.NewDecoder(newReader).Decode(&middleMan)log.Println(middleMan)不幸的是,对于嵌套对象,解码器似乎被破坏了。打印出来的不是吐出实际的物体,而是打印出来{{ a03dfee5-a754-4eb9 }}它似乎将整个事物展平到 id 字段中。这里发生了什么?
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
您期望会发生什么/被打印出来?
log
包(使用fmt
包)打印用大括号括起来的结构,列出用空格分隔的字段值。
你MiddleMan
有一个字段,所以它看起来像这样:
{field}
field
另一个struct
类型在哪里CompletedByUser
,它有 2 个字段,所以它看起来像这样:
{{field1 field2}}
wherefield
的string
类型是空字符串,因此您会看到field2
前缀为空格的值:
{{ a03dfee5-a754-4eb9}}
如果您打印它添加字段名称:
log.Printf("%+v", middleMan)
您将看到如下输出:
{User:{DisplayName: Id:a03dfee5-a754-4eb9}}
使用另一种(Go 语法)格式:
log.Printf("%#v", middleMan)
输出:
main.MiddleMan{User:main.CompletedByUser{DisplayName:"", Id:"a03dfee5-a754-4eb9"}}
在Go Playground上试试这个。
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消