code: public Object getValue() {
          if (type == STRING) {
              if (text.length() == 2) {
                  return "";
              } else {
                  return text.substring(1, text.length() - 1);
              }
          } else if (type == NUMBER) {
              if (text.contains(".") || text.contains("e") || text.contains("E")) {
                  // a decimal number
                  return new BigDecimal(text);
              } else {
                  // an integer number
                  BigInteger v = new BigInteger(text);
                  if (v.compareTo(MAX_INTEGER) <= 0 && v.compareTo(MIN_INTEGER) >= 0) {
                      return v.intValue();
                  } else if (v.compareTo(MAX_LONG) <= 0 && v.compareTo(MIN_LONG) >= 0) {
                      return v.longValue();
                  } else {
                      return v;
                  }
              }
          } else if (type == TRUE) {
              return true;
          } else if (type == FALSE) {
              return false;
          } else if (type == NULL) {
              return null;
          } else {
              throw new JsonException(
                      "No appropriate value represented by '" + text +
                      "' on line: " + startLine + ", column: " + startColumn
              );
          }
      }
docs: Return the value represented by this token (ie. a number, a string, a boolean or null).
  For numbers, the most appropriate type is returned (Float, Double, BigDecimal for decimal numbers,
  and Integer, Long and BigInteger for integral numbers).
  
  @return the represented value