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 字段中。這里發(fā)生了什么?
1 回答

白板的微信
TA貢獻1883條經(jīng)驗 獲得超3個贊
您期望會發(fā)生什么/被打印出來?
log
包(使用fmt
包)打印用大括號括起來的結(jié)構(gòu),列出用空格分隔的字段值。
你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 關(guān)注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消