code: @NonNull
      static List<Address> parseJson(final byte[] jsonData,
                                     final int maxResults,
                                     final boolean parseAddressComponents)
              throws GeocoderException {
          try {
              final String jsonString = new String(jsonData, Charset.forName("UTF-8"));
              final JSONObject jsonObject = new JSONObject(jsonString);
  
              if (!jsonObject.has(STATUS)) {
                  throw new GeocoderException(new JSONException("No \"status\" field"));
              }
  
              final Status status = Status.fromString(jsonObject.getString(STATUS));
              switch (status) {
                  case OK:
                      if (jsonObject.has(RESULTS)) {
                          return parseResults(maxResults, parseAddressComponents, jsonObject);
                      }
                      return new ArrayList<>();
  
                  case ZERO_RESULTS:
                      return new ArrayList<>();
  
                  default:
                      final GeocoderException e = GeocoderException.forStatus(status);
                      try {
                          if (jsonObject.has(ERROR_MESSAGE)) {
                              e.setErrorMessage(jsonObject.getString(ERROR_MESSAGE));
                          }
                      } catch (JSONException ignored) {
                      }
                      throw e;
              }
          } catch (JSONException e) {
              throw new GeocoderException(e);
          }
      }
docs: Parses response into {@link List}
  
  @param jsonData
  @param maxResults
  @param parseAddressComponents
  @return {@link Address} {@link List}
  @throws GeocoderException if error occurs