在Go中解组动态json内容

I have a dynamic json object which I want to unmarshal in my Go app. The problem is that some parts of the json are dynamically named, so I don't know what to put in the struc type json tags. To illustrate my problem, please see this playground: https://play.golang.org/p/q8J0VVO7uj

As you can see the s1 can perfectly be unmarshalled, because the struct type indeed has tag description. But s2 cannot be unmarshalled.

So my question is: how can I solve this? Can I make use of interfaces here?

Use a map for dynamic keys:

type ElvisEvent struct {
    Timestamp int64  `json:"timestamp"`
    Type      string `json:"type"`
    AssetID   string `json:"assetId"`
    Metadata  struct {
    } `json:"metadata"`

    ChangedMetadata map[string]struct {
        OldValue interface{} `json:"oldValue"`
        NewValue interface{} `json:"newValue"`
    } `json:"changedMetadata"`
}

playground example