GoLang Unmarshal极端嵌套结构

时间:2017-08-09 20:47:05

标签: json go types marshalling unmarshalling

给出以下结构

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?

0 个答案:

没有答案