private JSONResult parse(String jsonString) {
    JSONResult ret = new JSONResult();

    JSON json = JSONSerializer.toJSON(jsonString);
    JSONObject jo = (JSONObject) json;
    ret.total = jo.getInt("totalCount");

    Set<String> names;

    JSONArray arrResults = jo.optJSONArray("results");
    if (arrResults != null) {
      names = getArray(arrResults);
    } else {
      JSONObject results = jo.optJSONObject("results");

      if (results != null) {
        names = Collections.singleton(getSingle(results));
      } else {
        LOGGER.warn("No results found");
        names = Collections.EMPTY_SET;
      }
    }

    ret.names = names;
    ret.returnedCount = names.size();

    return ret;
  }
 /**
  * Queries gerrit for the files included in this patch set.
  *
  * @param gerritQueryHandler the query handler, responsible for the queries to gerrit.
  * @return a list of files that are part of this patch set.
  */
 public List<String> getFiles(GerritQueryHandler gerritQueryHandler) {
   if (files == null) {
     files = new LinkedList<String>();
     try {
       List<JSONObject> jsonList = gerritQueryHandler.queryFiles("change:" + getChange().getId());
       for (JSONObject json : jsonList) {
         if (json.has("type") && "stats".equalsIgnoreCase(json.getString("type"))) {
           continue;
         }
         if (json.has("currentPatchSet")) {
           JSONObject currentPatchSet = json.getJSONObject("currentPatchSet");
           if (currentPatchSet.has("files")) {
             JSONArray changedFiles = currentPatchSet.optJSONArray("files");
             for (int i = 0; i < changedFiles.size(); i++) {
               JSONObject file = changedFiles.getJSONObject(i);
               files.add(file.getString("file"));
             }
           }
         }
       }
     } catch (IOException e) {
       logger.error("IOException occured. ", e);
     } catch (GerritQueryException e) {
       logger.error("Bad query. ", e);
     }
   }
   return files;
 }