Golang Json Unmarshal Numeric with Exponent
將JSON 字串解組到包含帶指數的數值的結構時,您可能會遇到指數始終被截斷為0。當結構體欄位的類型與JSON 中的資料類型。
在提供的範例中,Person 結構體的 Id 欄位定義為 uint64,表示無符號 64 位元整數。然而,JSON 字串中的值是科學記數法的十進制數(1.2E 8)。
由於Go 無法自動將帶指數的小數轉換為無符號64 位元整數,因此結果被截斷為0.
如何解決問題
解決此問題問題,您可以修改Id欄位的類型以符合JSON字串中的資料類型。在這種情況下,由於數字是十進制,因此您可以使用float32 或float64:
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
透過將類型更新為float32 或float64,Go 現在可以正確解釋帶有指數的數值並為其賦值到Person 結構體的Id 欄位。
或者,如果您希望保留 Id 的原始整數類型,您可以使用自訂 JSON解組器鉤子。此鉤子可以在將浮點值分配給字段之前將其轉換為整數:
type Person struct { Id int64 `json:"id"` Name string `json:"name"` } func (p *Person) UnmarshalJSON(b []byte) error { type Alias Person var a Alias if err := json.Unmarshal(b, &a); err != nil { return err } // Convert the float64 Id to int64 p.Id = int64(a.Id) return nil }
使用自訂解組器,JSON 字串中帶有指數的數值將被正確轉換並分配給Person 結構體的Id 欄位。
以上是如何在 Go 中處理數值 JSON 解組中的指數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!