docs: def search_issues(self,
                        jql_str,
                        startAt=0,
                        maxResults=50,
                        validate_query=True,
                        fields=None,
                        expand=None,
                        json_result=None,
                        ):
          """Get a :class:`~jira.client.ResultList` of issue Resources matching a JQL search string.
  
          :param jql_str: The JQL search string.
          :type jql_str: str
          :param startAt: Index of the first issue to return. (Default: 0)
          :type startAt: int
          :param maxResults: Maximum number of issues to return. Total number of results
              is available in the ``total`` attribute of the returned :class:`~jira.client.ResultList`.
              If maxResults evaluates as False, it will try to get all issues in batches. (Default: 50)
          :type maxResults: int
          :param validate_query: Whether or not the query should be validated. (Default: True)
          :type validate_query: bool
          :param fields: comma-separated string or list of issue fields to include in the results.
              Default is to include all fields.
          :type fields: Optional[str or list]
          :param expand: extra information to fetch inside each resource
          :type expand: Optional[str]
          :param json_result: JSON response will be returned when this parameter is set to True.
                  Otherwise, :class:`~jira.client.ResultList` will be returned.
          :type json_result: bool
  
          :rtype: dict or :class:`~jira.client.ResultList`
  
          """
          if isinstance(fields, string_types):
              fields = fields.split(",")
          else:
              fields = list(fields or [])
  
          # this will translate JQL field names to REST API Name
          # most people do know the JQL names so this will help them use the API easier
          untranslate = {}  # use to add friendly aliases when we get the results back
          if self._fields:
              for i, field in enumerate(fields):
                  if field in self._fields:
                      untranslate[self._fields[field]] = fields[i]
                      fields[i] = self._fields[field]
  
          search_params = {
              "jql": jql_str,
              "startAt": startAt,
              "validateQuery": validate_query,
              "fields": fields,
              "expand": expand}
          if json_result:
              search_params["maxResults"] = maxResults
              if not maxResults:
                  warnings.warn('All issues cannot be fetched at once, when json_result parameter is set', Warning)
              return self._get_json('search', params=search_params)
  
          issues = self._fetch_pages(Issue, 'issues', 'search', startAt, maxResults, search_params)
  
          if untranslate:
              for i in issues:
                  for k, v in iteritems(untranslate):
                      if k in i.raw.get('fields', {}):
                          i.raw['fields'][v] = i.raw['fields'][k]
  
          return issues