beego 時間類型json格式化問題
再使用beego的orm框架時,如果希望重新定義time.Time轉json的格式,我們可以重寫time.Time類型,這樣,就不用每次返回給客戶端的時候去手動轉了治宣,代碼如下
package lib
import (
"encoding/json"
"fmt"
"time"
"github.com/astaxie/beego/orm"
)
type Time struct {
time.Time
}
// MarshalJSON 序列化為JSON
func (t Time) MarshalJSON() ([]byte, error) {
if t.IsZero() {
return []byte("\"\""), nil
}
stamp := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
return []byte(stamp), nil
}
// UnmarshalJSON 反序列化為JSON
func (t *Time) UnmarshalJSON(data []byte) error {
var err error
t.Time, err = time.Parse("2006-01-02 15:04:05", string(data)[1:20])
return err
}
// String 重寫String方法
func (t *Time) String() string {
data, _ := json.Marshal(t)
return string(data)
}
// FieldType 數據類型
func (t *Time) FieldType() int {
return orm.TypeDateTimeField
}
// SetRaw 讀取數據庫值
func (t *Time) SetRaw(value interface{}) error {
switch value.(type) {
case time.Time:
t.Time = value.(time.Time)
}
return nil
}
// RawValue 寫入數據庫
func (t *Time) RawValue() interface{} {
str := t.Format("2006-01-02 15:04:05")
if str == "0001-01-01 00:00:00" {
return nil
}
return str
}
你只需要將默認的類型time.Time類型改為lib.Time就OK了