code: func (service *Service) UnmarshalJSON(data []byte) error {
  	var ccService struct {
  		Metadata internal.Metadata
  		Entity   struct {
  			Label             string `json:"label"`
  			Description       string `json:"description"`
  			DocumentationURL  string `json:"documentation_url"`
  			ServiceBrokerName string `json:"service_broker_name"`
  			Extra             string `json:"extra"`
  		}
  	}
  
  	err := cloudcontroller.DecodeJSON(data, &ccService)
  	if err != nil {
  		return err
  	}
  
  	service.GUID = ccService.Metadata.GUID
  	service.Label = ccService.Entity.Label
  	service.Description = ccService.Entity.Description
  	service.DocumentationURL = ccService.Entity.DocumentationURL
  	service.ServiceBrokerName = ccService.Entity.ServiceBrokerName
  
  	// We explicitly unmarshal the Extra field to type string because CC returns
  	// a stringified JSON object ONLY for the 'extra' key (see test stub JSON
  	// response). This unmarshal strips escaped quotes, at which time we can then
  	// unmarshal into the ServiceExtra object.
  	// If 'extra' is null or not provided, this means sharing is NOT enabled
  	if len(ccService.Entity.Extra) != 0 {
  		extra := ServiceExtra{}
  		err = json.Unmarshal([]byte(ccService.Entity.Extra), &extra)
  		if err != nil {
  			return err
  		}
  		service.Extra.Shareable = extra.Shareable
  		if service.DocumentationURL == "" {
  			service.DocumentationURL = extra.DocumentationURL
  		}
  	}
  
  	return nil
  }
docs: // UnmarshalJSON helps unmarshal a Cloud Controller Service response.