1 回答

TA貢獻2051條經驗 獲得超10個贊
首先,您的示例 JSON 輸入格式錯誤:它},以}}. 這會導致json.Unmarshal返回錯誤:
unexpected EOF
解決這個問題會導致更多問題,其中許多問題人們已經在評論中指出。例如,您的輸入與您的 不具有相同的結構struct,并且 JSON 數字解碼為float64,而不是int。其中一個值(帶有鍵的值"temp")是73.26,它不是整數。
我有點不喜歡悄悄地忽略未知字段,所以我喜歡使用json.Decoder不允許未知字段的 a 。這有助于確保您不會因使用錯誤的標簽或錯誤級別的標簽而搞亂數據結構,因為當您這樣做時,您只會將所有缺失的字段設置為零。所以我喜歡添加一個“忽略”解碼器來顯式忽略字段:
type ignored [0]byte
func (i *ignored) UnmarshalJSON([]byte) error {
return nil
}
然后,您可以聲明類型字段ignored,但仍然給它們 json 標簽(盡管默認匹配字段名稱往往就足夠了):
type overall struct {
Coord ignored
Weather ignored
Base ignored
Main Daily
}
如果您確實想直接解組為整數類型,則需要再次花哨,就像我在示例中所做的那樣。直接解組可能更明智float64。如果您這樣做(使用float64而不添加特殊類型只是為了忽略某些字段),您可以放棄使用json.NewDecoder.
您可以變得更奇特,并使用指針來判斷您的字段是否已填寫,但我在示例中沒有這樣做。我剪掉了文件讀?。ㄒ约皩ψx取調用缺乏錯誤檢查)并使用硬編碼輸入數據。解碼確實有效的最終版本位于Go Playground 上。
- 1 回答
- 0 關注
- 170 瀏覽
添加回答
舉報