如何在Go中以正确的类型解析JSON值?

时间:2017-10-24 03:16:24

标签: go

我在Go中处理来自JSON API的事件,但不幸的是,返回的每个值都被封装为字符串。

来自API的JSON事件看起来有点如下:

i-1

现在我解析这些evens的代码如下例所示:

[
  {
    "id": "283702",
    "price": "59.99",
    "time": "1508813904",
    "type": "some_update"
  },
  {
    "id": "283701",
    "price": "17.50",
    "time": "1508813858",
    "type": "some_update"
  }
]

现在这段代码有点重复,但基本上我正在解析type event []struct { ID string `json:"id"` Price string `json:"price"` Time string `json:"time"` Type string `json:"type"` } // Requesting and parsing events here ... id, err := strconv.ParseInt(event.ID, 0, 64) if err != nil { return err } price, err := strconv.ParseFloat(event.Price, 64) if err != nil { return err } timestamp, err := strconv.ParseInt(event.Time, 0, 64) if err != nil { return err } datetime := time.Unix(timestamp, 0).UTC() idprice,然后我将时间戳转换为时间值

现在我的问题是,我可以在解析JSON响应的同时转换值吗?或者没有办法解决这个问题,我需要稍后进行类型转换,如本例所示?

1 个答案:

答案 0 :(得分:5)

您不必使用string类型。 encoding/json包可以处理从字符串到字符串浮点整数 boolean 使用标签中的"string" option来输入类型。

举个例子,试试:

type event []struct {
    ID    uint64  `json:"id,string"`
    Price float64 `json:"price,string"`
    Time  int64   `json:"time,string"`
    Type  string  `json:"type"`
}