【问题标题】:How to parse JSON values in its correct type in Go?如何在 Go 中以正确类型解析 JSON 值?
【发布时间】:2017-10-24 14:55:21
【问题描述】:

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

来自该 API 的 JSON 事件如下所示:

[
  {
    "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()

现在这段代码有点重复,但基本上我正在解析idpricetime,然后我将时间戳转换为时间值。

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

【问题讨论】:

  • "现在我的问题是,我可以在解析 JSON 响应的同时转换这些值吗?"是的。请查看软件包文档、互联网或使用int尝试

标签: go


【解决方案1】:

您不必使用string 类型。 encoding/json 包可以处理从字符串到字符串浮点整数布尔类型的转换通过在标签中使用"string" option

举个例子,试试:

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

【讨论】:

  • 哇。这好多了?
猜你喜欢
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2015-08-07
  • 2018-10-09
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多