一尘不染

json解组嵌入式结构

go

我想解组结构Outer定义为:

type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}
func (i *Inner) UnmarshalJSON(data []byte) error {
    i.Data = string(data)
    return nil
}

使用json.Unmarshal(data, &Outer{})似乎只对使用InnerUnmarshalJSON,而忽略了Num场:https://play.golang.org/p/WUBfzpheMl

我有一个笨拙的解决方案,我Num可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。

谢谢!


阅读 240

收藏
2020-07-02

共1个答案

一尘不染

发生这种情况Inner是因为嵌入在中Outer。这意味着当json库调用unmarshaler时Outer,它最终以on调用了Inner

因此,在内部func (i *Inner) UnmarshalJSON(data []byte)data参数包含整个json字符串,然后Inner仅对其进行处理。

您可以通过InnerOuter

Outer struct {
    I Inner // make Inner an explicit field
    Num int `json:"Num"`
}

工作实例

2020-07-02