美文网首页
Go-json时间格式化

Go-json时间格式化

作者: 一个菜鸟JAVA | 来源:发表于2020-02-28 18:41 被阅读0次

在Go中time.Time在转化成json的过程中会被转化成其他格式,而不是常见的时间格式。我们可以通过下面这种方法使time.Time在json序列化和反序列化时自定义实现。同理,其他类型可以仿造这种方式实现。

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

// 设置时间格式
const (
    timeFormat = "2006-01-02 15:04:05"
)

// 自定义类型
type JsonDate time.Time

// JsonDate反序列化
func (t *JsonDate) UnmarshalJSON(data []byte) (err error) {
    newTime, err := time.ParseInLocation("\""+timeFormat+"\"", string(data), time.Local)
    *t = JsonDate(newTime)
    return
}

// JsonDate序列化
func (t JsonDate) MarshalJSON() ([]byte, error) {
    timeStr := fmt.Sprintf("\"%s\"", time.Time(t).Format(timeFormat))
    return []byte(timeStr),nil
}

// string方法
func (t JsonDate) String() string {
    return time.Time(t).Format(timeFormat)
}

// 定义User结构体
type User struct {
    UserName      string    `json:"user_name"`
    Sex           bool      `json:"sex"`
    BirthDay      time.Time `json:"birth_day"`
    Age           int       `json:"age"`
    Score         float64   `json:"score"`
    StartWorkDate JsonDate  `json:"start_work_date"`
}

func main() {
    // 转json
    Serial()
    // json转struct
    UnSerial()
}

// 序列化成Json
func Serial() {

    user := User{
        UserName:      "Mac",
        Sex:           false,
        BirthDay:      time.Now(),
        Age:           18,
        Score:         95.8,
        StartWorkDate: JsonDate(time.Now()),
    }

    jsonByte, err := json.Marshal(user)

    if err != nil {
        fmt.Println("json serial err: ", err.Error())
    }
    fmt.Println(string(jsonByte))
}

// 反序列化成对象
func UnSerial() {
    str := `{"user_name":"Mac","sex":false,"birth_day":"2020-02-28T18:13:59.738342443+08:00","age":18,"score":95.8,"start_work_date":"2020-02-28 18:13:59"}`
    user := new(User)
    err := json.Unmarshal([]byte(str), user)

    if err != nil {
        fmt.Println("json unSerial err: ",err.Error())
    }

    fmt.Printf("%+v\n",user)
}

相关文章

网友评论

      本文标题:Go-json时间格式化

      本文链接:https://www.haomeiwen.com/subject/pgqrhhtx.html