首页 >后端开发 >Golang >在 Go 中解析 JSON 时如何保留 Int64 值?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-14 16:36:18557浏览

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