code: public static Object stringToValue(String string) {
  		if (string.equals("")) {
  			return string;
  		}
  		if (string.equalsIgnoreCase("true")) {
  			return Boolean.TRUE;
  		}
  		if (string.equalsIgnoreCase("false")) {
  			return Boolean.FALSE;
  		}
  		if (string.equalsIgnoreCase("null")) {
  			return JSONObject.NULL;
  		}
  
  		/*
  		 * If it might be a number, try converting it. If a number cannot be
  		 * produced, then the value will just be a string.
  		 */
  
  		char initial = string.charAt(0);
  		if ((initial >= '0' && initial <= '9') || initial == '-') {
  			try {
  				if (string.indexOf('.') > -1 || string.indexOf('e') > -1
  						|| string.indexOf('E') > -1
  						|| "-0".equals(string)) {
  					Double d = Double.valueOf(string);
  					if (!d.isInfinite() && !d.isNaN()) {
  						return d;
  					}
  				} else {
  					Long myLong = new Long(string);
  					if (string.equals(myLong.toString())) {
  						if (myLong.longValue() == myLong.intValue()) {
  							return Integer.valueOf(myLong.intValue());
  						}
  						return myLong;
  					}
  				}
  			} catch (Exception ignore) {}
  		}
  		return string;
  	}
docs: Try to convert a string into a number, boolean, or null. If the string
  can't be converted, return the string.
  
  @param string A String.
  @return A simple JSON value.