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

前端之家收集整理的这篇文章主要介绍了在Golang中使用长数字的JSON封送,提供浮点数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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 %#v\n",x)
    result,err := json.Marshal(x)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("encoded to %s\n",result)
}

结果:

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

猜你在找的Go相关文章