Я выполнял маршалинг и демаршализацию JSON с использованием golang, и когда я хочу сделать это с числовыми полями, golang, например, преобразует его в числа с плавающей запятой вместо использования длинных чисел.
У меня есть следующий JSON:
{
"id": 12423434,
"Name": "Fernando"
}
После того, как marshal
его на карту и unmarshal
снова в строку JSON я получаю:
{
"id":1.2423434e+07,
"Name":"Fernando"
}
Как видите, поле "id"
находится в нотации с плавающей запятой.
Код, который я использую, следующий:
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)
}
Это печатает:
map[id:1.2423434e+07 Name:Fernando]
{"Name":"Fernando","id":1.2423434e+07}
Похоже, что первый marshal
на карте генерирует FP. Как я могу исправить это долго?
Это ссылка на программу на детской площадке в Голанде: http://play.golang.org/p/RRJ6uU4Uw-