package block import ( "encoding/json" ) type Block struct { Components []Component } type BlockInstance struct { Components []ComponentInstance } func (b *BlockInstance) FromJSON(block *Block, data []byte) error { var raw map[string]json.RawMessage if err := json.Unmarshal(data, &raw); err != nil { return err } var components []ComponentInstance for _, c := range block.Components { jsonValue, ok := raw[c.Identifier()] // jsonValue, ok := raw[c.Identifier()] if !ok { // continue jsonValue = nil } instance := c.NewInstance() if err := instance.FromJSON(c, jsonValue); err != nil { return err } components = append(components, instance) } b.Components = components return nil }