diff --git a/JSONML.java b/JSONML.java index a4b874d..8d5e6c6 100644 --- a/JSONML.java +++ b/JSONML.java @@ -174,7 +174,7 @@ public class JSONML { if (!(token instanceof String)) { throw x.syntaxError("Missing value"); } - newjo.accumulate(attribute, XML.stringToValue((String)token)); + newjo.accumulate(attribute, JSONObject.stringToValue((String)token)); token = null; } else { newjo.accumulate(attribute, ""); @@ -227,7 +227,7 @@ public class JSONML { } else { if (ja != null) { ja.put(token instanceof String - ? XML.stringToValue((String)token) + ? JSONObject.stringToValue((String)token) : token); } } diff --git a/JSONObject.java b/JSONObject.java index 2f613f8..c37de6b 100644 --- a/JSONObject.java +++ b/JSONObject.java @@ -30,7 +30,8 @@ import java.io.Writer; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.math.*; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; @@ -1477,7 +1478,6 @@ public class JSONObject { * @return A simple JSON value. */ public static Object stringToValue(String string) { - Double d; if (string.equals("")) { return string; } @@ -1496,23 +1496,23 @@ public class JSONObject { * produced, then the value will just be a string. */ - char b = string.charAt(0); - if ((b >= '0' && b <= '9') || b == '-') { + char initial = string.charAt(0); + if ((initial >= '0' && initial <= '9') || initial == '-') { try { if (string.indexOf('.') > -1 || string.indexOf('e') > -1 - || string.indexOf('E') > -1) { - d = Double.valueOf(string); + || 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 == myLong.intValue()) { - return myLong.intValue(); - } else { - return myLong; + if (myLong.longValue() == myLong.intValue()) { + return Integer.valueOf(myLong.intValue()); } + return myLong; } } } catch (Exception ignore) { diff --git a/XML.java b/XML.java index f14463c..a45ef15 100644 --- a/XML.java +++ b/XML.java @@ -238,7 +238,7 @@ public class XML { throw x.syntaxError("Missing value"); } jsonobject.accumulate(string, - XML.stringToValue((String) token)); + JSONObject.stringToValue((String) token)); token = null; } else { jsonobject.accumulate(string, ""); @@ -270,7 +270,7 @@ public class XML { string = (String) token; if (string.length() > 0) { jsonobject.accumulate("content", - XML.stringToValue(string)); + JSONObject.stringToValue(string)); } } else if (token == LT) { @@ -295,49 +295,17 @@ public class XML { } } } - + /** - * Try to convert a string into a number, boolean, or null. If the string - * can't be converted, return the string. This is much less ambitious than - * JSONObject.stringToValue, especially because it does not attempt to - * convert plus forms, octal forms, hex forms, or E forms lacking decimal - * points. + * This method has been deprecated in favor of the + * {@link JSONObject.stringToValue(String)} method. Use it instead. * + * @deprecated Use {@link JSONObject#stringToValue(String)} instead. * @param string - * A String. - * @return A simple JSON value. + * @return JSON value of this string or the string */ public static Object stringToValue(String string) { - if ("true".equalsIgnoreCase(string)) { - return Boolean.TRUE; - } - if ("false".equalsIgnoreCase(string)) { - return Boolean.FALSE; - } - if ("null".equalsIgnoreCase(string)) { - return JSONObject.NULL; - } - - // 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); - 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; + return JSONObject.stringToValue(string); } /**