给出以下结构
type UpdateConcert struct {
FullConcert FullConcert
Fields map[string]interface{}
}
type FullConcert struct {
DomConcert *dom.Concert
DomSingerID string `json:"domSingerID"`
DomSingerGroupID string `json:"domSingerGroupID"`
}
dom.Concert太大而无法发布但包含int64,int,更多嵌套的结构切片,字符串,字符串切片和dom.Concert上总共90个字段的时间指针(不包括较低的嵌套结构) )。此外,所有json标记都存在于dom.Concert以及其上的所有嵌套结构中。
做的时候:
var arrayToUnmarshalInto []UpdateConcert
var bytes []byte
bytes, err = json.Marshal(concerts)
if err != nil {
return errors.Wrap(err, "Failed to marshal concerts")
}
byteLength := len(bytes)
str := string(bytes[:byteLength])
err = json.Unmarshal(bytes, &arrayToUnmarshalInto)
if err != nil {
return errors.Wrap(err, "Failed to unmarshal concerts")
}
fmt.Printf("%v", str)
fmt.Printf("%v", arrayToUnmarshalInto)
return nil
使用" encoding / json"中的标准json.Marshal。我们可以获得一个有效的字节切片,当从字节切片转换为字符串时,我们会看到预期的字符串化JSON。但是,arrayToUnmarshalInto会生成一个空切片。在检查单个UpdateConcert结构时,我们只看到默认值和nil。但是,当迭代我们已经解组的map [string] inteface {}时,我们可以成功打印所有值。
如何为这样一个多变且深度嵌套的结构编写自定义unmarshal?