zoukankan      html  css  js  c++  java
  • 自定义Json序列化

    link

    http://choly.ca/post/go-json-marshalling/

    https://zhuanlan.zhihu.com/p/27472716

    玩法还是蛮多的,如果能理解反射就好了。我们不能每次为了特定json返回而改原始的struct,我们直接从出口入手。

    type MyUser struct {
        ID int64 `json:"id"`
        Name string `json:"name"`
        LastSeen time.Time `json:"last_seen"`
    }
    
    func main() {
        _ = json.NewEncoder(os.Stdout).Encode(
            &MyUser{ID:1, Name:"ken", LastSeen:time.Now()})
    }
    
    //func (u *MyUser) MarshalJSON() ([]byte, error) {
    //    return json.Marshal(&struct {
    //        ID       int64  `json:"id"`
    //        Name     string `json:"name"`
    //        LastSeen int64  `json:"lastSeen"`
    //    }{
    //        ID:       u.ID,
    //        Name:     u.Name,
    //        LastSeen: u.LastSeen.Unix(),
    //    })
    //}
    
    
    func (u *MyUser) MarshalJSON() ([]byte, error) {
        type Alias MyUser
        return json.Marshal(&struct {
            lastSeen int64 `json:"lastSeen"`
            Name string `json:"name,omitempty"`
            *Alias
        }{
            lastSeen:    u.LastSeen.Unix(),
            Alias:    (*Alias)(u),
        })
    }

    这里我们的自定义的目的是多加一个特定格式的time   json字段,且把name屏蔽掉。

    {"id":1,"last_seen":"2020-04-28T09:48:18.9537416+08:00"}
    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    Add Binary <leetcode>
    那些坑
    面试集锦
    随看随记
    View的事件处理流程
    android studio view.setId报错
    EditText的hint不显示
    EditText 焦点
    Android拍照的那些事
    微信支付提示签名错误
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12792123.html
Copyright © 2011-2022 走看看