diff --git a/XML.java b/XML.java index d49784d..cea3abe 100755 --- a/XML.java +++ b/XML.java @@ -31,7 +31,7 @@ import java.util.Iterator; * This provides static methods to convert an XML text into a JSONObject, * and to covert a JSONObject into an XML text. * @author JSON.org - * @version 2012-10-26 + * @version 2013-11-12 */ public class XML { @@ -301,9 +301,6 @@ public class XML { * @return A simple JSON value. */ public static Object stringToValue(String string) { - if ("".equals(string)) { - return string; - } if ("true".equalsIgnoreCase(string)) { return Boolean.TRUE; } @@ -313,36 +310,26 @@ public class XML { if ("null".equalsIgnoreCase(string)) { return JSONObject.NULL; } - if ("0".equals(string)) { - return new Integer(0); - } -// If it might be a number, try converting it. If that doesn't work, -// return the string. +// If it might be a number, try converting it, first as a Long, and then as a +// Double. If that doesn't work, return the string. try { char initial = string.charAt(0); - boolean negative = false; - if (initial == '-') { - initial = string.charAt(1); - negative = true; - } - if (initial == '0' && string.charAt(negative ? 2 : 1) == '0') { - return string; - } - if ((initial >= '0' && initial <= '9')) { - if (string.indexOf('.') >= 0) { - return Double.valueOf(string); - } else if (string.indexOf('e') < 0 && string.indexOf('E') < 0) { - Long myLong = new Long(string); - if (myLong.longValue() == myLong.intValue()) { - return new Integer(myLong.intValue()); - } else { - return myLong; - } + if (initial == '-' || (initial >= '0' && initial <= '9')) { + Long value = new Long(string); + if (value.toString().equals(string)) { + return value; } } } catch (Exception ignore) { + try { + Double value = new Double(string); + if (value.toString().equals(string)) { + return value; + } + } catch (Exception ignoreAlso) { + } } return string; }