我想解码为结构 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{})
似乎只使用 Inner
的 UnmarshalJSON
并忽略 Num
字段:https://play.golang.org/p/WUBfzpheMl
我有一个笨重的 solution我在其中手动设置了 Num
字段,但我想知道是否有人有更干净或更简单的方法来做到这一点。
谢谢!
最佳答案
发生这种情况是因为 Inner
正在嵌入 Outer
.这意味着当 json 库在 Outer
上调用 unmarshaler 时,它最终会在 Inner
上调用它.
因此,里面func (i *Inner) UnmarshalJSON(data []byte)
, data
参数包含整个 json 字符串,然后您将处理 Inner
仅。
您可以通过制作 Inner
来解决这个问题Outer
中的显式字段
Outer struct {
I Inner // make Inner an explicit field
Num int `json:"Num"`
}
关于json解码嵌入式结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982445/