亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何更改 Go 結構中的 JSON 標記?

如何更改 Go 結構中的 JSON 標記?

Go
小唯快跑啊 2022-08-24 11:14:34
我有一個看起來像這樣的結構type MediaFile struct {    ID                   string    `json:"id"`                Secret               string    `json:"-"`    Title                string    `json:"title"`}我希望能夠在滿足條件時將 Secret 的腳本標記更改為。json:"secret"結構 MediaFile 在代碼的其他部分中已被大量引用,因此使用具有不同名稱的不同結構是不可行的。我試圖使用像下面這樣的指針。請注意,我已經刪除了結構媒體文件的定義,如前面的示例所示。type AlterMediaFile struct {    ID                   string    `json:"id"`                Secret               string    `json:"secret"`    Title                string    `json:"title"`}type MediaFile struct {    *AlterMediaFile}但它導致我收到了很多升級字段錯誤,因為它的AlterMediaFile基本上只是MediaFile的嵌套類。那么,有沒有簡單的方法可以讓我能夠將“秘密”腳本標簽從更改為?json:"-"json:"secret"
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您不能在運行時將“Secret”腳本標記從 更改為 。json:"-"json:"secret"

但是,可以使用 選項 ,指定如果字段具有空值(在本例中為空字符串),則應從編碼中省略該字段。omitemptyjson:"secret,omitempty"

當不滿足條件時,您只需將字段設置為空字符串(這可以通過數據庫完成),它就不會顯示在json數據中。Secret


查看完整回答
反對 回復 2022-08-24
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

你可以編寫自己的MarshalJSON/UnmarshalJSON方法。


type MediaFile struct {

    ID     string

    Secret string

    Title  string

}


type jsonMediaFile struct {

    ID    string `json:"id"`

    Title string `json:"title"`

}


type jsonSecretMediaFile struct {

    *jsonMediaFile

    Secret string `json:"secret"`

}


func (mf *MediaFile) MarshalJSON() ([]byte, error) {

    jsonMF := jsonMediaFile{

        ID:    mf.ID,

        Title: mf.Title,

    }


    if isNeedMarshalSecret() {

        return json.Marshal(jsonSecretMediaFile{

            jsonMediaFile: &jsonMF,

            Secret:        mf.Secret,

        })

    }

    

    return json.Marshal(jsonMF)

}


查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號