2

unix タイムスタンプとしてエンコードされた JSON にしたい updated_at フィールドを持つ構造体があります。

私は動作していないように見える次のことを試しました.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)
}

これを行うためのより良い、またはよりエレガントなソリューションはありますか?

4

2 に答える 2