code: func (r *Request) UnmarshalJSON(data []byte) error {
  	var r2 struct {
  		Method string           `json:"method"`
  		Params *json.RawMessage `json:"params,omitempty"`
  		Meta   *json.RawMessage `json:"meta,omitempty"`
  		ID     *ID              `json:"id"`
  	}
  
  	// Detect if the "params" field is JSON "null" or just not present
  	// by seeing if the field gets overwritten to nil.
  	r2.Params = &json.RawMessage{}
  
  	if err := json.Unmarshal(data, &r2); err != nil {
  		return err
  	}
  	r.Method = r2.Method
  	if r2.Params == nil {
  		r.Params = &jsonNull
  	} else if len(*r2.Params) == 0 {
  		r.Params = nil
  	} else {
  		r.Params = r2.Params
  	}
  	r.Meta = r2.Meta
  	if r2.ID == nil {
  		r.ID = ID{}
  		r.Notif = true
  	} else {
  		r.ID = *r2.ID
  		r.Notif = false
  	}
  	return nil
  }
docs: // UnmarshalJSON implements json.Unmarshaler.