docs: @SuppressWarnings("unchecked")
  	protected <T extends Object> T extractFieldValue(
  			final JSONObject jsonObject, final String field, final Class<T> fieldType) {
  		T fieldValue = null;
  		if ((jsonObject != null) && jsonObject.has(field) && !jsonObject.isNull(field)) {
  			try {
  				if (fieldType == String.class) {
  					fieldValue = (T) jsonObject.getString(field);
  				} else if (fieldType == Integer.class) {
  					fieldValue = (T) Integer.valueOf(jsonObject.getInt(field));
  				} else if (fieldType == Long.class) {
  					fieldValue = (T) Long.valueOf(jsonObject.getLong(field));
  				} else if (fieldType == Float.class) {
  					fieldValue = (T) Float.valueOf(Double.toString(jsonObject.getDouble(field)));
  				} else if (fieldType == JSONArray.class) {
  					fieldValue = (T) jsonObject.getJSONArray(field);
  				} else if (fieldType == JSONObject.class) {
  					fieldValue = (T) jsonObject.getJSONObject(field);
  				} else {
  					fieldValue = (T) jsonObject.get(field);
  				}
  			} catch (final JSONException | ClassCastException e) {
  				// TODO Log a warning
  			}
  		}
  
  		return fieldValue;
  	}