我想解组结构Outer定义为:
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
json.Unmarshal(data, &Outer{})
Inner
UnmarshalJSON
Num
我有一个笨拙的解决方案,我Num可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。
谢谢!
发生这种情况Inner是因为嵌入在中Outer。这意味着当json库调用unmarshaler时Outer,它最终以on调用了Inner。
因此,在内部func (i *Inner) UnmarshalJSON(data []byte),data参数包含整个json字符串,然后Inner仅对其进行处理。
func (i *Inner) UnmarshalJSON(data []byte)
data
您可以通过Inner在Outer
Outer struct { I Inner // make Inner an explicit field Num int `json:"Num"` }
工作实例