timehorse · 2019-07-28 13:32:41 · 10808 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览
这是一个创建于 2019-07-28 13:32:41 的文章,其中的信息可能已经有所发展或是发生改变。
名词MarshalJSON 序列化:意思是将某种结构转化为字符串格式
UnmarshalJSON 反序列化:意思是将字符串形式转化为某种结构形式
golang的时间格式 默认采用的是RFC3339,与我们常认知的格式不同,故需要转化,但是这个转化目前也有点麻烦,一种方法是重写两个接口(marshaljson跟unmarshaljson)方法。如下:
package main import ( "encoding/json" "fmt" "time" ) type JSONTime struct { time.Time } func (t *JSONTime) MarshalJSON() ([]byte, error) { // 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 return []byte(fmt.Sprintf(`"%s"`, t.Format("2006-01-02 15:04:05"))), nil } func (t *JSONTime) UnmarshalJSON(data []byte) error { var err error t.Time, err = time.Parse(`"2006-01-02 15:04:05"`, string(data)) if err != nil { return err } return nil } type Time struct { T JSONTime `json:"t,omitempty"` } func main() { t := &Time{ T: JSONTime{time.Now()}, } tBytes, _ := json.Marshal(t) fmt.Println(string(tBytes)) t = &Time{} _ = json.Unmarshal(tBytes, t) fmt.Println(t.T) }
1 回复 | 直到 2020-10-26 18:59:13
· #1 · 2月之前
t.Format("2006-01-02 15:04:05") 真是够奇葩的,以为随便什么都可以的
https://blog.sciencenet.cn/blog-40692-1266179.html
上一篇:[转载]招生简章:北京中医药大学 2021年“申请-审核制”博士研究生招生简章
下一篇:[转载]国家自然科学基金委员会——交叉科学三处:基于理学、工学、医学等领域的交叉科学研究