code: func MarshalJSON(schema interface{}, forceSendFields, nullFields []string) ([]byte, error) {
  	if len(forceSendFields) == 0 && len(nullFields) == 0 {
  		return json.Marshal(schema)
  	}
  
  	mustInclude := make(map[string]struct{})
  	for _, f := range forceSendFields {
  		mustInclude[f] = struct{}{}
  	}
  	useNull := make(map[string]struct{})
  	for _, f := range nullFields {
  		useNull[f] = struct{}{}
  	}
  
  	dataMap, err := schemaToMap(schema, mustInclude, useNull)
  	if err != nil {
  		return nil, err
  	}
  	return json.Marshal(dataMap)
  }
docs: // MarshalJSON returns a JSON encoding of schema containing only selected fields.
  // A field is selected if any of the following is true:
  //   * it has a non-empty value
  //   * its field name is present in forceSendFields and it is not a nil pointer or nil interface
  //   * its field name is present in nullFields.
  // The JSON key for each selected field is taken from the field's json: struct tag.