当解组json字符串到struct中时,我有问题是带有指数的数值总是为0。 请检查以下代码:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Person struct {
Id uint64 `json:"id"`
Name string `json:"name"`
}
func main() {
//Create the Json string
var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`)
//Marshal the json to a proper struct
var f Person
json.Unmarshal(b, &f)
//print the person
fmt.Println(f)
//unmarshal the struct to json
result, _ := json.Marshal(f)
//print the json
os.Stdout.Write(result)
}
跑步是:
{0 Fernando}
有什么方法可以让它发挥作用吗?因为指数的东西是标准的JSON。似乎golang错误地解释了它。
答案 0 :(得分:1)
将Id
类型从int64
更改为float32
或float64
。
http://play.golang.org/p/-zidTD_q8y
编辑:这可能有点乱,但您可以添加Id
类型的“虚拟”float64
字段并编写一个钩子来强制转换值到实际的Id
类型int64
。
type Person struct {
Id float64 `json:"id"`
_Id int64
Name string `json:"name"`
}
var f Person
var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`)
_ = json.Unmarshal(b, &f)
if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
fmt.Println(f.Id)
f._Id = int64(f.Id)
}
答案 1 :(得分:0)
只需将id字段的类型更改为float64。
<div class="container">
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
<div class="card">
</div>
</div>