我在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()
,id
和price
,然后我将时间戳转换为时间值
现在我的问题是,我可以在解析JSON响应的同时转换值吗?或者没有办法解决这个问题,我需要稍后进行类型转换,如本例所示?
答案 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"`
}