I have a some json data where there is a field called lastModifed contains time in millis. I wanted to convert this data into a struct type with json.UnMarshaller. I have mapped the field with json filed. But the conversion seems not working.
IE :
My Json looks like this:
{
"name" : "hello",
"lastModified" : 1438167001716
}
and struct Looks like
type Model struct {
Name string `json:"name"`
Lastmodified time.Time `json:"lastModified"`
}
looks not converting the time properly. how can i get the time from those millis??
NB: The millis of lastModifiedTime are getting from java System.currentTimeMillis();
In golang time.Time
marshals to JSON using RFC3339, string representation. So you need to unmarshal your json using int64
instead of time.Time
and convert after it by yourself:
type Model struct {
Name string `json:"name"`
Millis int64 `json:"lastModified"`
}
func (m Model) Lastmodified() time.Time {
return time.Unix(0, m.Millis * int64(time.Millisecond))
}
Also you can use special wrapper above time.Time
and override UnmarshalJSON there:
type Model struct {
Name string `json:"name"`
Lastmodified javaTime `json:"lastModified"`
}
type javaTime time.Time
func (j *javaTime) UnmarshalJSON(data []byte) error {
millis, err := strconv.ParseInt(string(data), 10, 64)
if err != nil {
return err
}
*j = javaTime(time.Unix(0, millis * int64(time.Millisecond)))
return nil
}