我有一個結構與updated_at字段,我想將JSON編碼爲unix時間戳。如何使用mgo解組文檔中的命名類型別名?
我想這似乎並沒有工作, 的的updated_at字段永遠不會從MongoDB的文檔解組如下:
type Timestamp time.now
func (t Timestamp) MarshalJSON() ([]byte, error) {
ts := time.Time(t).Unix()
fmt.Println(ts)
stamp := fmt.Sprint(ts)
return []byte(stamp), nil
}
type User struct {
UpdatedAt *Timestamp `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
}
我找到了一個臨時解決方案,寫出結構的MarshalJSON功能,做事情像這樣(更新UpdatedAt類型爲* time.Time):
func (u *User) MarshalJSON() ([]byte, error) {
out := make(map[string]interface{})
if u.UpdatedAt != nil && !u.UpdatedAt.IsZero() {
out["updated_at"] = u.UpdatedAt.Unix()
}
return json.Marshal(out)
}
是否有更好或更優雅的解決方案呢?
您提到了解組中的困難,但沒有給出UnmarshalJSON()函數。這不是(http://play.golang.org/p/9UlXFkC1t-)的工作? 我不知道mgo或MongoDB。我覺得我很明顯地表明,無論出於何種原因,這都不適用於mgo。 – Gnani 2014-09-04 13:00:30
@Gnani我正在談論從BSON解封,而不是從JSON ...該字段不是從MongoDB文檔中讀取的 – 2014-09-04 17:35:47