首頁 >後端開發 >Golang >在 Go 中解析 JSON 時如何保留 Int64 值?

在 Go 中解析 JSON 時如何保留 Int64 值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-14 16:36:18554瀏覽

How to Preserve Int64 Values When Parsing JSON in Go?

在 Go 中解析 JSON 時保留 Int64 值

處理包含具有 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn