栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Go中解析json时保留int64值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Go中解析json时保留int64值

解决方案1

您可以使用Deprer和UseNumber解码您的号码而不会丢失:

Number
类型的定义如下:

// A Number represents a JSON number literal.type Number string

这意味着您可以轻松地将其转换:

package mainimport (    "encoding/json"    "fmt"    "bytes"    "strconv")func main() {    body := []byte("{"tags":[{"id":4418489049307132905},{"id":4418489049307132906}]}")    dat := make(map[string]interface{})    d := json.NewDeprer(bytes.NewBuffer(body))    d.UseNumber()    if err := d.Depre(&dat); err != nil {        panic(err)    }    tags := dat["tags"].([]interface{})    n := tags[0].(map[string]interface{})["id"].(json.Number)    i64, _ := strconv.ParseUint(string(n), 10, 64)    fmt.Println(i64) // prints 4418489049307132905}

解决方案2

您还可以解码为适合您需求的特定结构:

package mainimport (    "encoding/json"    "fmt")type A struct {    Tags []map[string]uint64 // "tags"}func main() {    body := []byte("{"tags":[{"id":4418489049307132905},{"id":4418489049307132906}]}")    var a A    if err := json.Unmarshal(body, &a); err != nil {        panic(err)    }    fmt.Println(a.Tags[0]["id"]) // logs 4418489049307132905}

就我个人而言,我通常更喜欢这种解决方案,它感觉更结构化且易于维护。

警告

如果您使用JSON,因为您的应用程序部分是在Javascript中的,请注意:Javascript没有64位整数,只有一个数字类型,即IEEE754双精度浮点数。因此,您将无法使用标准解析功能在Javascript中解析此JSON而不会丢失。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号