首頁 > 後端開發 > Golang > 為什麼 Golang JSON 遇到有指數的數值時會出現 Unmarshal 錯誤?

為什麼 Golang JSON 遇到有指數的數值時會出現 Unmarshal 錯誤?

Mary-Kate Olsen
發布: 2024-11-15 19:21:02
原創
732 人瀏覽過

Why Does Golang JSON Unmarshal Error When Encountering Numeric Values with Exponents?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板