encoding/json 怎么将日期字符串解析成time.Time格式

user 结构如下

type user struct{
    Id   int
    Name  string
    Password  string
    Register   time.Time
}

//读取从页面客户端POST发送上来的数据, 用encoding/json解析数据, 无法解析出register的值
info := &models.User{}
json.Unmarshal(c.Ctx.Input.RequestBody, &info)

info.Register一直为空, tcpdump抓包是看到register有值的, 不知道json怎么转换才行?

已邀请:

kggg

赞同来自:

谢谢, 不错的方法, 看来是需要转换一下

package main

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

type User struct {
        ID int       `json:"id"`
        TS time.Time `json:"ts"`
}

type Alias User
type UserQuery struct {
        TS string `json:"ts"`
        *Alias
}

func (u *User) UnmarshalJSON(data []byte) error {
        aux := UserQuery{
                Alias: (*Alias)(u),
        }
        if err := json.Unmarshal(data, &aux); err != nil {
                return err
        }

        u.TS, _ = time.Parse("2006-01-02", aux.TS)
        return nil
}

func main() {
        u := `{"id": 1, "ts": "2018-10-10"}`
        var ss User
        err := ss.UnmarshalJSON([]byte(u))
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(ss.TS)
}

luw2007

赞同来自:

解压缩有点小问题 https://goplay.space/#_-m52BvQYjz

package main

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

type User struct {
    TS time.Time `json:"ts"`
}

type Alias User
type UserQuery struct {
    TS int64 `json:"ts"`
    *Alias
}

func (u *User) UnmarshalJSON(data []byte) error {
    aux := UserQuery{Alias: (*Alias)(u)}
    if err := json.Unmarshal(data, aux.Alias); err != nil {
        fmt.Println(err)
        return err
    }
    u.TS = aux.Alias.TS
    return nil
}

func (u *User) MarshalJSON() ([]byte, error) {
    return json.Marshal(&UserQuery{Alias: (*Alias)(u), TS: u.TS.Unix()})
}

func main() {
    u := User{TS: time.Now()}
    j, _ := json.Marshal(u)
    json.Unmarshal(j, &u)
    fmt.Println(u.TS)
}

要回复问题请先登录注册