How to format timestamp in outgoing JSON

What you can do is, wrap time.Time as your own custom type, and make it implement the Marshaler interface:

type Marshaler interface {
    MarshalJSON() ([]byte, error)

So what you’d do is something like:

type JSONTime time.Time

func (t JSONTime)MarshalJSON() ([]byte, error) {
    //do your serializing here
    stamp := fmt.Sprintf("\"%s\"", time.Time(t).Format("Mon Jan _2"))
    return []byte(stamp), nil

and make document:

type Document struct {
    Name        string
    Content     string
    Stamp       JSONTime
    Author      string

and have your intialization look like:

 testDoc := model.Document{"Meeting Notes", "These are some notes", JSONTime(time.Now()), "Bacon"}    

And that’s about it. If you want unmarshaling, there is the Unmarshaler interface too.

Leave a Comment