處理包含具有 int64 值的物件陣列的 JSON POST 要求時,通常會遇到轉換問題。 JSON.Unmarshal 會自動將這些值轉換為 float64,這可能很不方便。本文探討了保留原始 int64 值的解。
解決方案 1:使用數字類型
json.Decoder 型別包含 UseNumber 方法,讓您解碼數字轉換為自訂類型。透過定義表示 JSON 數位文字的 Number 類型,您可以輕鬆地將其轉換回 int64:
func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var dat map[string]interface{} d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() if err := d.Decode(&dat); err != nil { panic(err) } // ... n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) }
解決方案2:解碼為自訂結構
您也可以直接解碼為適合您的特定結構data:
type A struct { Tags []map[string]uint64 } func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } // ... println(a.Tags[0]["id"]) }
注意:
注意:請注意,如果您的應用程式與僅支援IEEE754 雙精度浮點的JavaScript 交互,您可能會遇到int64 值的解析問題.以上是在 Go 中解析 JSON 時如何保留 Int64 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!