簡體   English   中英

嘗試將 unix 格式的字符串轉換為 time.Time 時,使用 json.Unmarshal 會導致 ParseError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM