为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中将数组的数组解析为结构?

如何在 Go 中将数组的数组解析为结构?

Go
宝慕林4294392 2022-12-19 21:06:24
[[1501545600000,"a","b","c","d","pass this","e",1651363200000],[1504224000000,"a","b","c","d","pass this","e",1654041600000],...]我有一堆这样的数组。它来自外部 API。我想将它映射到一个结构。而且我不需要“传递这个”字段。我怎样才能做到这一点?这也是我的结构type Address struct {    RegistrationDate string `json:"registrationDate"`    Name             string `json:"name"`    Address          string `json:"address"`    City             string `json:"city"`    State            string `json:"state"`    Zip              string `json:"zip"`    ExpirationDate   string `json:"expirationDate"`}谢谢你。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以Address实现json.Unmarshaler接口。

type Address struct {

    RegistrationDate int64  `json:"registrationDate"`

    Name             string `json:"name"`

    Address          string `json:"address"`

    City             string `json:"city"`

    State            string `json:"state"`

    Zip              string `json:"zip"`

    ExpirationDate   int64  `json:"expirationDate"`

}


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

    var discard string

    return json.Unmarshal(data, &[]any{

        &a.RegistrationDate,

        &a.Name,

        &a.Address,

        &a.City,

        &a.State,

        &discard,

        &a.Zip,

        &a.ExpirationDate,

    })

}

https://go.dev/play/p/eSaXEQ-onOC


如果您需要日期字段保留字符串,您可以使用“转换器”类型来解组 JSON 数字,然后将结果转换int为string.


type Int64String string


func (s *Int64String) UnmarshalJSON(data []byte) error {

    var i64 int64

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

        return err

    }


    *s = Int64String(strconv.FormatInt(i64, 10))

    return nil

}

type Address struct {

    RegistrationDate string `json:"registrationDate"`

    Name             string `json:"name"`

    Address          string `json:"address"`

    City             string `json:"city"`

    State            string `json:"state"`

    Zip              string `json:"zip"`

    ExpirationDate   string `json:"expirationDate"`

}


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

    var discard string

    return json.Unmarshal(data, &[]any{

        (*Int64String)(&a.RegistrationDate),

        &a.Name,

        &a.Address,

        &a.City,

        &a.State,

        &discard,

        &a.Zip,

        (*Int64String)(&a.ExpirationDate),

    })

}

https://go.dev/play/p/Z3TBL82g_lY


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号