1
我想解析一個在python中生成的時間戳,併發布到這裏存儲在cassandra中,並且出現一個奇怪的錯誤。解析JSON時間錯誤
parsing time ""2015-11-05 14:14:32-0700"" as ""2006-01-02T15:04:05Z07:00"": cannot parse " 14:14:32-0700"" as "T"
我不想修改從反正蟒蛇給我的,只是想將它傳遞直接進入卡桑德拉時間,但司機說我需要它是time.Time
(不串)做所以。
下面是代碼
type OurCustomType struct {
TimeStamp time.Time `json:"timestamp"`
}
func extractJsonBody(r *http.Request) []byte {
body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
if err != nil {
//...
}
if err := r.Body.Close(); err != nil {
//....
}
return body
}
func View(w http.ResponseWriter, r *http.Request) {
var variable OurCustomType
body := extractJsonBody(r)
if err := json.Unmarshal(body, &variable); err != nil {
//..
} else {
//...
}
}
編輯:我已經實現了我自己的time.Time
類型,實現了自定義UnmarshalJSON
試圖解決這個問題。
type PythonTime struct {
time.Time
}
func (self *PythonTime) UnmarshalJSON(b []byte) (err error) {
self.Time, err = time.Parse("2006-01-02 15:04:05-0700", string(b))
return
}
但我沒有得到這個錯誤:
parsing time ""2015-11-05 14:14:32-0700"" as "2006-01-02 15:04:05-0700": cannot parse ""2015-11-05 14:14:32-0700"" as "2006"
時間類需要一個格式字符串,在你的情況下它會是'2006-01-02 15:04:05-0700'。我相信你不能直接提供給unmashaller,所以你必須爲你的類型實現'UnmarshalJSON'來在那裏處理它,或者解組成一個字符串並在稍後轉換它。更多關於格式字符串的東西在這裏; http://stackoverflow.com/questions/25845172/parsing-date-string-in-golang這裏是一個示例實現MarshalJSON,你需要做的是類似的,只是爲了解組http://stackoverflow.com/questions/20475321/override-layout-by-json-marshal-to-format-time-time – evanmcdonnal
@evanmcdonnal感謝您的評論,這讓我非常接近,但我仍然收到一個我不確定的錯誤。查看最近的編輯 – electrometro
我不確定如何幫助你。我在這裏做了一個快速測試https://play.golang.org/p/fZ7soeHJhj,它應該工作。我通常建議在這裏打印/檢查'string(b)'的值,因爲某些原因格式不匹配,但是錯誤使得它看起來像'string(b)'正在產生期望值。 – evanmcdonnal