將 JSON 資料解組到 Go 結構時,帶指數的數值通常會被誤解為零。當結構體中的目標欄位聲明為整數類型時,就會發生這種情況。
要解決此問題,請按照以下步驟操作:
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
這是一個示例:
package main import ( "encoding/json" "fmt" "os" ) type Person struct { Id float32 `json:"id"` Name string `json:"name"` } func main() { // Create the JSON string. var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`) // Unmarshal the JSON to a proper struct. var f Person json.Unmarshal(b, &f) // Print the person. fmt.Println(f) // Unmarshal the struct to JSON. result, _ := json.Marshal(f) // Print the JSON. os.Stdout.Write(result) }
這將輸出:
{1.2e+08 Fernando} {"id":1.2e+08,"Name":"Fernando"}
替代方法:
如果必須為欄位使用整數類型,則可以使用float64 類型的「虛擬」欄位來擷取帶指數的數值。然後,使用鉤子將值轉換為實際的整數類型。
這是一個範例:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } 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) }
這將輸出:
1.2e+08 {Name:Fernando Id:120000000}
以上是如何在 Go 中處理帶指數的 JSON 數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!