【发布时间】:2021-05-20 03:17:41
【问题描述】:
我想解组
var j = []byte(`[{"major":1},{"minor":0}]`)
进入
type Version struct {
Major int `json:"major"`
Minor int `json:"minor"`
}
通过循环内部切片使用自定义解组器:
func (h *Version) UnmarshalJSON(b []byte) error {
var wrapper []json.RawMessage
err := json.Unmarshal(b, &wrapper)
if err == nil {
for _, v := range wrapper {
if err = json.Unmarshal(v, &h); err != nil {
break
}
}
}
return err
}
内部UnmarshalJSON 触发器
json: cannot unmarshal object into Go value of type []json.RawMessage
这很奇怪,因为目标是*Version。这里有什么问题?播放:https://play.golang.org/p/Av59IkYTioS
【问题讨论】:
-
你调用 json.Unmarshal(v, h) 来调用 Version.UnmarshalJSON。你根本不能这样做。你要么需要一个辅助类型,要么重新设计。