Golang JSON 解組錯誤:指數值回傳0
在嘗試將JSON 資料解組到Go 結構體時,使用者遇到了帶指數的數值始終被解釋為0 的問題。此行為源自於預期類型與實際值之間的不符。
例如,如果像{"id": 1.2e 8 這樣的JSON 字串, "Name": "Fernando"} 將被解組為具有uint64 類型的Id 字段的結構體,結果Id 將為0。
解決方案
要解決此問題,請確保結構中欄位的類型與 JSON 字串中資料的類型相符。在這種情況下,由於使用了指數,因此 Id 欄位應定義為浮點類型,例如 float32 或 float64。
替代解決方案
對於以下情況預期類型與 JSON 數位格式不相容,可以實作解決方法。透過新增所需類型的「虛擬」字段,可以使用鉤子將值轉換為實際預期類型。
例如:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
解組 JSON 資料後在 Person 結構中,可以新增條件檢查以將 Id 欄位轉換為 int64。
var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
這種 hacky 方法允許將浮點 Id 欄位轉換為所需的 int64 類型。
以上是為什麼 Golang JSON 遇到有指數的數值時會出現 Unmarshal 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!