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

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

自定義取消編組 json 組合兩個字段

自定義取消編組 json 組合兩個字段

Go
互換的青春 2022-09-26 19:47:42
我有一些json,我想解封到以下結構中type Activity struct {    Start  time.Time `json:"start"`    End    time.Time `json:"end"`}如果 json 格式正確,則工作正常。但是,有時“end”字段存在,但只是一個空字符串{        "start": "2020-06-02T07:48:35.911Z",        "end":""}在這種情況下,我想要活動結束 = 活動開始無論如何,我可以通過實現取消元帥JSON來做到這一點,還是我必須使用地圖?
查看完整描述

1 回答

?
BIG陽

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

根據姆科普里瓦的建議:


package main


import (

    "encoding/json"

    "fmt"

    "time"

)


type Activity struct {

    Start time.Time `json:"start"`

    End   time.Time `json:"end"`

}


func (a *Activity) UnmarshalJSON(data []byte) error {

    var v struct {

        Start time.Time

        End   json.RawMessage

    }

    if err := json.Unmarshal(data, &v); err != nil {

        return err

    }

    if len(v.End) > 0 && string(v.End) != `""` {

        a.Start = v.Start

        return json.Unmarshal([]byte(v.End), &a.End)

    }

    

    a.Start = v.Start

    a.End = v.Start

    return nil

}


func main() {

    var data1 = []byte(`{"start": "2020-06-02T07:48:35.911Z","end":"2021-10-15T07:48:35.911Z"}`)

    var data2 = []byte(`{"start": "2020-06-02T07:48:35.911Z","end":""}`)


    var a Activity

    if err := json.Unmarshal(data1, &a); err != nil {

        panic(err)

    }

    fmt.Printf("%+v\n", a)


    if err := json.Unmarshal(data2, &a); err != nil {

        panic(err)

    }

    fmt.Printf("%+v\n", a)

}

輸出:


{Start:2020-06-02 07:48:35.911 +0000 UTC End:2021-10-15 07:48:35.911 +0000 UTC}

{Start:2020-06-02 07:48:35.911 +0000 UTC End:2020-06-02 07:48:35.911 +0000 UTC}


查看完整回答
反對 回復 2022-09-26
  • 1 回答
  • 0 關注
  • 71 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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