Golang Json用指数解组数字

时间:2016-04-03 05:37:26

标签: json go

当解组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错误地解释了它。

这里是游乐场:http://play.golang.org/p/8owgjX9y0m

2 个答案:

答案 0 :(得分:1)

Id类型从int64更改为float32float64

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)
}

http://play.golang.org/p/32HHLxnFlX

答案 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>