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 欄位中。這里發生了什么?
uj5u.com熱心網友回復:
你期望發生什么/得到列印?
的log包(其使用fmt包)列印在大括號結構,列出的欄位值相隔的空間。
你MiddleMan有一個欄位,所以它看起來像這樣:
{field}
field另一個structtype在哪里CompletedByUser,它有 2 個欄位,所以它看起來像這樣:
{{field1 field2}}
哪里field是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上試試這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/371075.html
