[英]Using json.Unmarshal gives ParseError when trying to convert unix formatted string into time.Time
我有一個包含以下內容的JSON
文件:
{ ...
"body": "{\"timestampFrom\":\"154087600\"}"
...
}
當我嘗試執行時:
if err := json.Unmarshal([]byte(apiGatewayEvent.Body), &config); err != nil {
glog.Errorf("Error occurred while trying to unmarshal body of APIGatewayProxyRequest. Error message - %v", err)
return nil, err
}
我收到:
嘗試解組 APIGatewayProxyRequest 主體時出錯。
錯誤信息 - 將時間“1540857600”解析為“2006-01-02T15:04:05Z07:00”:無法將“857600”解析為“-”
事情是我總是會收到 UNIX 格式的輸入,我需要將它轉換為time.Time
。 我該怎么做?
您可以聲明自己的時間類型並使其實現 json.Unmarshaller,例如:
package main
import (
"encoding/json"
"fmt"
"log"
"strconv"
"time"
)
var data = []byte(`{"timestamp": 1562764768}`)
type myTime time.Time
func (mt *myTime) UnmarshalJSON(b []byte) error {
timestamp, err := strconv.ParseInt(string(b), 10, 64)
if err != nil {
return err
}
*mt = myTime(time.Unix(timestamp, 0))
return nil
}
func (mt *myTime) String() string {
return time.Time(*mt).String()
}
type body struct {
Timestamp *myTime `json:"timestamp"`
}
func main() {
var b body
err := json.Unmarshal(data, &b)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", b)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.