加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Golang中使用长数字的JSON封送,提供浮点数

发布时间:2020-12-16 19:10:37 所属栏目:大数据 来源:网络整理
导读:我正在使用golang来封送一个解密的JSONs,而当我想用数字字段进行编码时,golang以浮点数字转换,而不是使用长数字。 我有以下Json: {"id": 12423434,"Name": "Fernando"} 在将它组织到一个地图上,然后再将其解组成一个json字符串,我得到: {"id":1.24234
我正在使用golang来封送一个解密的JSONs,而当我想用数字字段进行编码时,golang以浮点数字转换,而不是使用长数字。

我有以下Json:

{
"id": 12423434,"Name": "Fernando"
}

在将它组织到一个地图上,然后再将其解组成一个json字符串,我得到:

{
"id":1.2423434e+07,"Name":"Fernando"
}

您可以看到“名称”字段是浮点符号。

我使用的代码如下:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {

    //Create the Json string
    var b = []byte(`
        {
        "id": 12423434,"Name": "Fernando"
        }
    `)

    //Marshal the json to a map
    var f interface{}
    json.Unmarshal(b,&f)
    m := f.(map[string]interface{})

    //print the map
    fmt.Println(m)

    //unmarshal the map to json
    result,_:= json.Marshal(m)

    //print the json
    os.Stdout.Write(result)

}

打印:
地图[id:1.2423434e 07名称:Fernando]
{“Name”:“Fernando”,“id”:1.2423434e 07}

似乎是地图的第一个元帅会生成FP。如何解决这个问题?

这是goland游乐场中的节目的链接:
http://play.golang.org/p/RRJ6uU4Uw-

费尔

有时你不能提前定义一个结构体,但仍然要求数字通过元数据组合进程不变。

在这种情况下,您可以使用Json.Decoder上的UseNumber方法,这将使所有数字解组为json.Number(这只是数字的原始字符串表示形式)。这对于在JSON中存储非常大的整数也是有用的。

例如:

package main

import (
    "strings"
    "encoding/json"
    "fmt"
    "log"
)

var data = `{
    "id": 12423434,"Name": "Fernando"
}`

func main() {
    d := json.NewDecoder(strings.NewReader(data))
    d.UseNumber()
    var x interface{}
    if err := d.Decode(&x); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("decoded to %#vn",x)
    result,err := json.Marshal(x)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("encoded to %sn",result)
}

结果:

decoded to map[string]interface {}{"id":"12423434","Name":"Fernando"}
encoded to {"Name":"Fernando","id":12423434}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读