I updated the code.  Not using UnmarshalJSON() because we can't implement pointer receiver (c *ContextMap)UnmarshalJSON on an interface, without pointer it is always passed by value and I don't know how to get the unmarshaled context back into the caller.