diff --git a/JSONObject.java b/JSONObject.java
index 399f093..9d2d5ce 100755
--- a/JSONObject.java
+++ b/JSONObject.java
@@ -1,28 +1,28 @@
package org.json;
/*
-Copyright (c) 2002 JSON.org
+ Copyright (c) 2002 JSON.org
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
-The Software shall be used for Good, not Evil.
+ The Software shall be used for Good, not Evil.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ */
import java.io.IOException;
import java.io.StringWriter;
@@ -43,29 +43,32 @@ import java.util.Set;
* A JSONObject is an unordered collection of name/value pairs. Its external
* form is a string wrapped in curly braces with colons between the names and
* values, and commas between the values and names. The internal form is an
- * object having get
and opt
methods for accessing the
- * values by name, and put
methods for adding or replacing values
- * by name. The values can be any of these types: Boolean
,
+ * object having get
and opt
methods for accessing
+ * the values by name, and put
methods for adding or replacing
+ * values by name. The values can be any of these types: Boolean
,
* JSONArray
, JSONObject
, Number
,
- * String
, or the JSONObject.NULL
object. A JSONObject
- * constructor can be used to convert an external form JSON text into an
- * internal form whose values can be retrieved with the get
and
- * opt
methods, or to convert values into a JSON text using the
- * put
and toString
methods. A get
method
- * returns a value if one can be found, and throws an exception if one cannot be
- * found. An opt
method returns a default value instead of throwing
- * an exception, and so is useful for obtaining optional values.
+ * String
, or the JSONObject.NULL
object. A
+ * JSONObject constructor can be used to convert an external form JSON text
+ * into an internal form whose values can be retrieved with the
+ * get
and opt
methods, or to convert values into a
+ * JSON text using the put
and toString
methods. A
+ * get
method returns a value if one can be found, and throws an
+ * exception if one cannot be found. An opt
method returns a
+ * default value instead of throwing an exception, and so is useful for
+ * obtaining optional values.
*
* The generic get()
and opt()
methods return an
* object, which you can cast or query for type. There are also typed
* get
and opt
methods that do type checking and type
- * coercion for you. The opt methods differ from the get methods in that they do
- * not throw. Instead, they return a specified value, such as null.
+ * coercion for you. The opt methods differ from the get methods in that they
+ * do not throw. Instead, they return a specified value, such as null.
*
- * The put
methods add or replace values in an object. For example,
+ * The put
methods add or replace values in an object. For
+ * example,
*
*
- * myString = new JSONObject().put("JSON", "Hello, World!").toString(); + * myString = new JSONObject() + * .put("JSON", "Hello, World!").toString(); ** * produces the string
{"JSON": "Hello, World"}
.
@@ -78,46 +81,43 @@ import java.util.Set;
* before the closing brace.
* '
(single
* quote).{ } [ ] / \ : , = ; #
and if they do not look like numbers and
- * if they are not the reserved words true
, false
, or
- * null
.=
or =>
as well as by
- * :
.;
(semicolon) as
- * well as by ,
(comma).{ } [ ] / \ : , #
and if they do not look like numbers and
+ * if they are not the reserved words true
, false
,
+ * or null
.NULL
object than to use Java's null
value.
@@ -157,7 +158,6 @@ public class JSONObject {
*/
public static final Object NULL = new Null();
-
/**
* Construct an empty JSONObject.
*/
@@ -165,15 +165,19 @@ public class JSONObject {
this.map = new HashMap();
}
-
/**
- * Construct a JSONObject from a subset of another JSONObject.
- * An array of strings is used to identify the keys that should be copied.
- * Missing keys are ignored.
- * @param jo A JSONObject.
- * @param names An array of strings.
+ * Construct a JSONObject from a subset of another JSONObject. An array of
+ * strings is used to identify the keys that should be copied. Missing keys
+ * are ignored.
+ *
+ * @param jo
+ * A JSONObject.
+ * @param names
+ * An array of strings.
* @throws JSONException
- * @exception JSONException If a value is a non-finite number or if a name is duplicated.
+ * @exception JSONException
+ * If a value is a non-finite number or if a name is
+ * duplicated.
*/
public JSONObject(JSONObject jo, String[] names) {
this();
@@ -185,12 +189,14 @@ public class JSONObject {
}
}
-
/**
* Construct a JSONObject from a JSONTokener.
- * @param x A JSONTokener object containing the source string.
- * @throws JSONException If there is a syntax error in the source string
- * or a duplicated key.
+ *
+ * @param x
+ * A JSONTokener object containing the source string.
+ * @throws JSONException
+ * If there is a syntax error in the source string or a
+ * duplicated key.
*/
public JSONObject(JSONTokener x) throws JSONException {
this();
@@ -212,19 +218,15 @@ public class JSONObject {
key = x.nextValue().toString();
}
-// The key is followed by ':'. We will also tolerate '=' or '=>'.
+// The key is followed by ':'.
c = x.nextClean();
- if (c == '=') {
- if (x.next() != '>') {
- x.back();
- }
- } else if (c != ':') {
+ if (c != ':') {
throw x.syntaxError("Expected a ':' after a key");
}
this.putOnce(key, x.nextValue());
-// Pairs are separated by ','. We will also tolerate ';'.
+// Pairs are separated by ','.
switch (x.nextClean()) {
case ';':
@@ -242,12 +244,12 @@ public class JSONObject {
}
}
-
/**
* Construct a JSONObject from a Map.
*
- * @param map A map object that can be used to initialize the contents of
- * the JSONObject.
+ * @param map
+ * A map object that can be used to initialize the contents of
+ * the JSONObject.
* @throws JSONException
*/
public JSONObject(Map map) {
@@ -255,7 +257,7 @@ public class JSONObject {
if (map != null) {
Iterator i = map.entrySet().iterator();
while (i.hasNext()) {
- Map.Entry e = (Map.Entry)i.next();
+ Map.Entry e = (Map.Entry) i.next();
Object value = e.getValue();
if (value != null) {
this.map.put(e.getKey(), wrap(value));
@@ -264,42 +266,45 @@ public class JSONObject {
}
}
-
/**
- * Construct a JSONObject from an Object using bean getters.
- * It reflects on all of the public methods of the object.
- * For each of the methods with no parameters and a name starting
- * with "get"
or "is"
followed by an uppercase letter,
- * the method is invoked, and a key and the value returned from the getter method
- * are put into the new JSONObject.
+ * Construct a JSONObject from an Object using bean getters. It reflects on
+ * all of the public methods of the object. For each of the methods with no
+ * parameters and a name starting with "get"
or
+ * "is"
followed by an uppercase letter, the method is invoked,
+ * and a key and the value returned from the getter method are put into the
+ * new JSONObject.
*
- * The key is formed by removing the "get"
or "is"
prefix.
- * If the second remaining character is not upper case, then the first
- * character is converted to lower case.
+ * The key is formed by removing the "get"
or "is"
+ * prefix. If the second remaining character is not upper case, then the
+ * first character is converted to lower case.
*
* For example, if an object has a method named "getName"
, and
- * if the result of calling object.getName()
is "Larry Fine"
,
- * then the JSONObject will contain "name": "Larry Fine"
.
+ * if the result of calling object.getName()
is
+ * "Larry Fine"
, then the JSONObject will contain
+ * "name": "Larry Fine"
.
*
- * @param bean An object that has getter methods that should be used
- * to make a JSONObject.
+ * @param bean
+ * An object that has getter methods that should be used to make
+ * a JSONObject.
*/
public JSONObject(Object bean) {
this();
this.populateMap(bean);
}
-
/**
* Construct a JSONObject from an Object, using reflection to find the
- * public members. The resulting JSONObject's keys will be the strings
- * from the names array, and the values will be the field values associated
- * with those keys in the object. If a key is not found or not visible,
- * then it will not be copied into the new JSONObject.
- * @param object An object that has fields that should be used to make a
- * JSONObject.
- * @param names An array of strings, the names of the fields to be obtained
- * from the object.
+ * public members. The resulting JSONObject's keys will be the strings from
+ * the names array, and the values will be the field values associated with
+ * those keys in the object. If a key is not found or not visible, then it
+ * will not be copied into the new JSONObject.
+ *
+ * @param object
+ * An object that has fields that should be used to make a
+ * JSONObject.
+ * @param names
+ * An array of strings, the names of the fields to be obtained
+ * from the object.
*/
public JSONObject(Object object, String names[]) {
this();
@@ -313,26 +318,31 @@ public class JSONObject {
}
}
-
/**
- * Construct a JSONObject from a source JSON text string.
- * This is the most commonly used JSONObject constructor.
- * @param source A string beginning
- * with {
(left brace) and ending
- * with }
(right brace).
- * @exception JSONException If there is a syntax error in the source
- * string or a duplicated key.
+ * Construct a JSONObject from a source JSON text string. This is the most
+ * commonly used JSONObject constructor.
+ *
+ * @param source
+ * A string beginning with {
(left
+ * brace) and ending with }
+ * (right brace).
+ * @exception JSONException
+ * If there is a syntax error in the source string or a
+ * duplicated key.
*/
public JSONObject(String source) throws JSONException {
this(new JSONTokener(source));
}
-
/**
* Construct a JSONObject from a ResourceBundle.
- * @param baseName The ResourceBundle base name.
- * @param locale The Locale to load the ResourceBundle for.
- * @throws JSONException If any JSONExceptions are detected.
+ *
+ * @param baseName
+ * The ResourceBundle base name.
+ * @param locale
+ * The Locale to load the ResourceBundle for.
+ * @throws JSONException
+ * If any JSONExceptions are detected.
*/
public JSONObject(String baseName, Locale locale) throws JSONException {
this();
@@ -350,7 +360,7 @@ public class JSONObject {
// segment except the last. Add the value using the last segment's name into
// the deepest nested JSONObject.
- String[] path = ((String)key).split("\\.");
+ String[] path = ((String) key).split("\\.");
int last = path.length - 1;
JSONObject target = this;
for (int i = 0; i < last; i += 1) {
@@ -362,57 +372,59 @@ public class JSONObject {
}
target = nextTarget;
}
- target.put(path[last], bundle.getString((String)key));
+ target.put(path[last], bundle.getString((String) key));
}
}
}
-
/**
* Accumulate values under a key. It is similar to the put method except
- * that if there is already an object stored under the key then a
- * JSONArray is stored under the key to hold all of the accumulated values.
- * If there is already a JSONArray, then the new value is appended to it.
- * In contrast, the put method replaces the previous value.
+ * that if there is already an object stored under the key then a JSONArray
+ * is stored under the key to hold all of the accumulated values. If there
+ * is already a JSONArray, then the new value is appended to it. In
+ * contrast, the put method replaces the previous value.
*
- * If only one value is accumulated that is not a JSONArray, then the
- * result will be the same as using put. But if multiple values are
- * accumulated, then the result will be like append.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
+ * If only one value is accumulated that is not a JSONArray, then the result
+ * will be the same as using put. But if multiple values are accumulated,
+ * then the result will be like append.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * An object to be accumulated under the key.
* @return this.
- * @throws JSONException If the value is an invalid number
- * or if the key is null.
+ * @throws JSONException
+ * If the value is an invalid number or if the key is null.
*/
- public JSONObject accumulate(
- String key,
- Object value
- ) throws JSONException {
+ public JSONObject accumulate(String key, Object value) throws JSONException {
testValidity(value);
Object object = this.opt(key);
if (object == null) {
- this.put(key, value instanceof JSONArray
- ? new JSONArray().put(value)
- : value);
+ this.put(key,
+ value instanceof JSONArray ? new JSONArray().put(value)
+ : value);
} else if (object instanceof JSONArray) {
- ((JSONArray)object).put(value);
+ ((JSONArray) object).put(value);
} else {
this.put(key, new JSONArray().put(object).put(value));
}
return this;
}
-
/**
* Append values to the array under a key. If the key does not exist in the
* JSONObject, then the key is put in the JSONObject with its value being a
* JSONArray containing the value parameter. If the key was already
* associated with a JSONArray, then the value parameter is appended to it.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * An object to be accumulated under the key.
* @return this.
- * @throws JSONException If the key is null or if the current value
- * associated with the key is not a JSONArray.
+ * @throws JSONException
+ * If the key is null or if the current value associated with
+ * the key is not a JSONArray.
*/
public JSONObject append(String key, Object value) throws JSONException {
testValidity(value);
@@ -420,19 +432,20 @@ public class JSONObject {
if (object == null) {
this.put(key, new JSONArray().put(value));
} else if (object instanceof JSONArray) {
- this.put(key, ((JSONArray)object).put(value));
+ this.put(key, ((JSONArray) object).put(value));
} else {
- throw new JSONException("JSONObject[" + key +
- "] is not a JSONArray.");
+ throw new JSONException("JSONObject[" + key
+ + "] is not a JSONArray.");
}
return this;
}
-
/**
- * Produce a string from a double. The string "null" will be returned if
- * the number is not finite.
- * @param d A double.
+ * Produce a string from a double. The string "null" will be returned if the
+ * number is not finite.
+ *
+ * @param d
+ * A double.
* @return A String.
*/
public static String doubleToString(double d) {
@@ -443,8 +456,8 @@ public class JSONObject {
// Shave off trailing zeros and decimal point, if possible.
String string = Double.toString(d);
- if (string.indexOf('.') > 0 && string.indexOf('e') < 0 &&
- string.indexOf('E') < 0) {
+ if (string.indexOf('.') > 0 && string.indexOf('e') < 0
+ && string.indexOf('E') < 0) {
while (string.endsWith("0")) {
string = string.substring(0, string.length() - 1);
}
@@ -455,13 +468,14 @@ public class JSONObject {
return string;
}
-
/**
* Get the value object associated with a key.
*
- * @param key A key string.
- * @return The object associated with the key.
- * @throws JSONException if the key is not found.
+ * @param key
+ * A key string.
+ * @return The object associated with the key.
+ * @throws JSONException
+ * if the key is not found.
*/
public Object get(String key) throws JSONException {
if (key == null) {
@@ -469,135 +483,135 @@ public class JSONObject {
}
Object object = this.opt(key);
if (object == null) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] not found.");
+ throw new JSONException("JSONObject[" + quote(key) + "] not found.");
}
return object;
}
-
/**
* Get the boolean value associated with a key.
*
- * @param key A key string.
- * @return The truth.
- * @throws JSONException
- * if the value is not a Boolean or the String "true" or "false".
+ * @param key
+ * A key string.
+ * @return The truth.
+ * @throws JSONException
+ * if the value is not a Boolean or the String "true" or
+ * "false".
*/
public boolean getBoolean(String key) throws JSONException {
Object object = this.get(key);
- if (object.equals(Boolean.FALSE) ||
- (object instanceof String &&
- ((String)object).equalsIgnoreCase("false"))) {
+ if (object.equals(Boolean.FALSE)
+ || (object instanceof String && ((String) object)
+ .equalsIgnoreCase("false"))) {
return false;
- } else if (object.equals(Boolean.TRUE) ||
- (object instanceof String &&
- ((String)object).equalsIgnoreCase("true"))) {
+ } else if (object.equals(Boolean.TRUE)
+ || (object instanceof String && ((String) object)
+ .equalsIgnoreCase("true"))) {
return true;
}
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a Boolean.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not a Boolean.");
}
-
/**
* Get the double value associated with a key.
- * @param key A key string.
- * @return The numeric value.
- * @throws JSONException if the key is not found or
- * if the value is not a Number object and cannot be converted to a number.
+ *
+ * @param key
+ * A key string.
+ * @return The numeric value.
+ * @throws JSONException
+ * if the key is not found or if the value is not a Number
+ * object and cannot be converted to a number.
*/
public double getDouble(String key) throws JSONException {
Object object = this.get(key);
try {
- return object instanceof Number
- ? ((Number)object).doubleValue()
- : Double.parseDouble((String)object);
+ return object instanceof Number ? ((Number) object).doubleValue()
+ : Double.parseDouble((String) object);
} catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a number.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not a number.");
}
}
-
/**
* Get the int value associated with a key.
*
- * @param key A key string.
- * @return The integer value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to an integer.
+ * @param key
+ * A key string.
+ * @return The integer value.
+ * @throws JSONException
+ * if the key is not found or if the value cannot be converted
+ * to an integer.
*/
public int getInt(String key) throws JSONException {
Object object = this.get(key);
try {
- return object instanceof Number
- ? ((Number)object).intValue()
- : Integer.parseInt((String)object);
+ return object instanceof Number ? ((Number) object).intValue()
+ : Integer.parseInt((String) object);
} catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not an int.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not an int.");
}
}
-
/**
* Get the JSONArray value associated with a key.
*
- * @param key A key string.
- * @return A JSONArray which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONArray.
+ * @param key
+ * A key string.
+ * @return A JSONArray which is the value.
+ * @throws JSONException
+ * if the key is not found or if the value is not a JSONArray.
*/
public JSONArray getJSONArray(String key) throws JSONException {
Object object = this.get(key);
if (object instanceof JSONArray) {
- return (JSONArray)object;
+ return (JSONArray) object;
}
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONArray.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not a JSONArray.");
}
-
/**
* Get the JSONObject value associated with a key.
*
- * @param key A key string.
- * @return A JSONObject which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONObject.
+ * @param key
+ * A key string.
+ * @return A JSONObject which is the value.
+ * @throws JSONException
+ * if the key is not found or if the value is not a JSONObject.
*/
public JSONObject getJSONObject(String key) throws JSONException {
Object object = this.get(key);
if (object instanceof JSONObject) {
- return (JSONObject)object;
+ return (JSONObject) object;
}
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONObject.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not a JSONObject.");
}
-
/**
* Get the long value associated with a key.
*
- * @param key A key string.
- * @return The long value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to a long.
+ * @param key
+ * A key string.
+ * @return The long value.
+ * @throws JSONException
+ * if the key is not found or if the value cannot be converted
+ * to a long.
*/
public long getLong(String key) throws JSONException {
Object object = this.get(key);
try {
- return object instanceof Number
- ? ((Number)object).longValue()
- : Long.parseLong((String)object);
+ return object instanceof Number ? ((Number) object).longValue()
+ : Long.parseLong((String) object);
} catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a long.");
+ throw new JSONException("JSONObject[" + quote(key)
+ + "] is not a long.");
}
}
-
/**
* Get an array of field names from a JSONObject.
*
@@ -612,13 +626,12 @@ public class JSONObject {
String[] names = new String[length];
int i = 0;
while (iterator.hasNext()) {
- names[i] = (String)iterator.next();
+ names[i] = (String) iterator.next();
i += 1;
}
return names;
}
-
/**
* Get an array of field names from an Object.
*
@@ -641,74 +654,77 @@ public class JSONObject {
return names;
}
-
/**
* Get the string associated with a key.
*
- * @param key A key string.
- * @return A string which is the value.
- * @throws JSONException if there is no string value for the key.
+ * @param key
+ * A key string.
+ * @return A string which is the value.
+ * @throws JSONException
+ * if there is no string value for the key.
*/
public String getString(String key) throws JSONException {
Object object = this.get(key);
if (object instanceof String) {
- return (String)object;
+ return (String) object;
}
- throw new JSONException("JSONObject[" + quote(key) +
- "] not a string.");
+ throw new JSONException("JSONObject[" + quote(key) + "] not a string.");
}
-
/**
* Determine if the JSONObject contains a specific key.
- * @param key A key string.
- * @return true if the key exists in the JSONObject.
+ *
+ * @param key
+ * A key string.
+ * @return true if the key exists in the JSONObject.
*/
public boolean has(String key) {
return this.map.containsKey(key);
}
-
/**
* Increment a property of a JSONObject. If there is no such property,
- * create one with a value of 1. If there is such a property, and if
- * it is an Integer, Long, Double, or Float, then add one to it.
- * @param key A key string.
+ * create one with a value of 1. If there is such a property, and if it is
+ * an Integer, Long, Double, or Float, then add one to it.
+ *
+ * @param key
+ * A key string.
* @return this.
- * @throws JSONException If there is already a property with this name
- * that is not an Integer, Long, Double, or Float.
+ * @throws JSONException
+ * If there is already a property with this name that is not an
+ * Integer, Long, Double, or Float.
*/
public JSONObject increment(String key) throws JSONException {
Object value = this.opt(key);
if (value == null) {
this.put(key, 1);
} else if (value instanceof Integer) {
- this.put(key, ((Integer)value).intValue() + 1);
+ this.put(key, ((Integer) value).intValue() + 1);
} else if (value instanceof Long) {
- this.put(key, ((Long)value).longValue() + 1);
+ this.put(key, ((Long) value).longValue() + 1);
} else if (value instanceof Double) {
- this.put(key, ((Double)value).doubleValue() + 1);
+ this.put(key, ((Double) value).doubleValue() + 1);
} else if (value instanceof Float) {
- this.put(key, ((Float)value).floatValue() + 1);
+ this.put(key, ((Float) value).floatValue() + 1);
} else {
throw new JSONException("Unable to increment [" + quote(key) + "].");
}
return this;
}
-
/**
- * Determine if the value associated with the key is null or if there is
- * no value.
- * @param key A key string.
- * @return true if there is no value associated with the key or if
- * the value is the JSONObject.NULL object.
+ * Determine if the value associated with the key is null or if there is no
+ * value.
+ *
+ * @param key
+ * A key string.
+ * @return true if there is no value associated with the key or if the value
+ * is the JSONObject.NULL object.
*/
public boolean isNull(String key) {
return JSONObject.NULL.equals(this.opt(key));
}
-
/**
* Get an enumeration of the keys of the JSONObject.
*
@@ -718,7 +734,6 @@ public class JSONObject {
return this.keySet().iterator();
}
-
/**
* Get a set of keys of the JSONObject.
*
@@ -728,7 +743,6 @@ public class JSONObject {
return this.map.keySet();
}
-
/**
* Get the number of keys stored in the JSONObject.
*
@@ -738,16 +752,16 @@ public class JSONObject {
return this.map.size();
}
-
/**
* Produce a JSONArray containing the names of the elements of this
* JSONObject.
+ *
* @return A JSONArray containing the key strings, or null if the JSONObject
- * is empty.
+ * is empty.
*/
public JSONArray names() {
JSONArray ja = new JSONArray();
- Iterator keys = this.keys();
+ Iterator keys = this.keys();
while (keys.hasNext()) {
ja.put(keys.next());
}
@@ -756,12 +770,14 @@ public class JSONObject {
/**
* Produce a string from a Number.
- * @param number A Number
+ *
+ * @param number
+ * A Number
* @return A String.
- * @throws JSONException If n is a non-finite number.
+ * @throws JSONException
+ * If n is a non-finite number.
*/
- public static String numberToString(Number number)
- throws JSONException {
+ public static String numberToString(Number number) throws JSONException {
if (number == null) {
throw new JSONException("Null pointer");
}
@@ -770,8 +786,8 @@ public class JSONObject {
// Shave off trailing zeros and decimal point, if possible.
String string = number.toString();
- if (string.indexOf('.') > 0 && string.indexOf('e') < 0 &&
- string.indexOf('E') < 0) {
+ if (string.indexOf('.') > 0 && string.indexOf('e') < 0
+ && string.indexOf('E') < 0) {
while (string.endsWith("0")) {
string = string.substring(0, string.length() - 1);
}
@@ -782,38 +798,39 @@ public class JSONObject {
return string;
}
-
/**
* Get an optional value associated with a key.
- * @param key A key string.
- * @return An object which is the value, or null if there is no value.
+ *
+ * @param key
+ * A key string.
+ * @return An object which is the value, or null if there is no value.
*/
public Object opt(String key) {
return key == null ? null : this.map.get(key);
}
-
/**
- * Get an optional boolean associated with a key.
- * It returns false if there is no such key, or if the value is not
- * Boolean.TRUE or the String "true".
+ * Get an optional boolean associated with a key. It returns false if there
+ * is no such key, or if the value is not Boolean.TRUE or the String "true".
*
- * @param key A key string.
- * @return The truth.
+ * @param key
+ * A key string.
+ * @return The truth.
*/
public boolean optBoolean(String key) {
return this.optBoolean(key, false);
}
-
/**
- * Get an optional boolean associated with a key.
- * It returns the defaultValue if there is no such key, or if it is not
- * a Boolean or the String "true" or "false" (case insensitive).
+ * Get an optional boolean associated with a key. It returns the
+ * defaultValue if there is no such key, or if it is not a Boolean or the
+ * String "true" or "false" (case insensitive).
*
- * @param key A key string.
- * @param defaultValue The default.
- * @return The truth.
+ * @param key
+ * A key string.
+ * @param defaultValue
+ * The default.
+ * @return The truth.
*/
public boolean optBoolean(String key, boolean defaultValue) {
try {
@@ -823,30 +840,29 @@ public class JSONObject {
}
}
-
/**
- * Get an optional double associated with a key,
- * or NaN if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional double associated with a key, or NaN if there is no such
+ * key or if its value is not a number. If the value is a string, an attempt
+ * will be made to evaluate it as a number.
*
- * @param key A string which is the key.
- * @return An object which is the value.
+ * @param key
+ * A string which is the key.
+ * @return An object which is the value.
*/
public double optDouble(String key) {
return this.optDouble(key, Double.NaN);
}
-
/**
- * Get an optional double associated with a key, or the
- * defaultValue if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional double associated with a key, or the defaultValue if
+ * there is no such key or if its value is not a number. If the value is a
+ * string, an attempt will be made to evaluate it as a number.
*
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
+ * @param key
+ * A key string.
+ * @param defaultValue
+ * The default.
+ * @return An object which is the value.
*/
public double optDouble(String key, double defaultValue) {
try {
@@ -856,30 +872,29 @@ public class JSONObject {
}
}
-
/**
- * Get an optional int value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional int value associated with a key, or zero if there is no
+ * such key or if the value is not a number. If the value is a string, an
+ * attempt will be made to evaluate it as a number.
*
- * @param key A key string.
- * @return An object which is the value.
+ * @param key
+ * A key string.
+ * @return An object which is the value.
*/
public int optInt(String key) {
return this.optInt(key, 0);
}
-
/**
- * Get an optional int value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional int value associated with a key, or the default if there
+ * is no such key or if the value is not a number. If the value is a string,
+ * an attempt will be made to evaluate it as a number.
*
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
+ * @param key
+ * A key string.
+ * @param defaultValue
+ * The default.
+ * @return An object which is the value.
*/
public int optInt(String key, int defaultValue) {
try {
@@ -889,58 +904,55 @@ public class JSONObject {
}
}
-
/**
- * Get an optional JSONArray associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONArray.
+ * Get an optional JSONArray associated with a key. It returns null if there
+ * is no such key, or if its value is not a JSONArray.
*
- * @param key A key string.
- * @return A JSONArray which is the value.
+ * @param key
+ * A key string.
+ * @return A JSONArray which is the value.
*/
public JSONArray optJSONArray(String key) {
Object o = this.opt(key);
- return o instanceof JSONArray ? (JSONArray)o : null;
+ return o instanceof JSONArray ? (JSONArray) o : null;
}
-
/**
- * Get an optional JSONObject associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONObject.
+ * Get an optional JSONObject associated with a key. It returns null if
+ * there is no such key, or if its value is not a JSONObject.
*
- * @param key A key string.
- * @return A JSONObject which is the value.
+ * @param key
+ * A key string.
+ * @return A JSONObject which is the value.
*/
public JSONObject optJSONObject(String key) {
Object object = this.opt(key);
- return object instanceof JSONObject ? (JSONObject)object : null;
+ return object instanceof JSONObject ? (JSONObject) object : null;
}
-
/**
- * Get an optional long value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional long value associated with a key, or zero if there is no
+ * such key or if the value is not a number. If the value is a string, an
+ * attempt will be made to evaluate it as a number.
*
- * @param key A key string.
- * @return An object which is the value.
+ * @param key
+ * A key string.
+ * @return An object which is the value.
*/
public long optLong(String key) {
return this.optLong(key, 0);
}
-
/**
- * Get an optional long value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
+ * Get an optional long value associated with a key, or the default if there
+ * is no such key or if the value is not a number. If the value is a string,
+ * an attempt will be made to evaluate it as a number.
*
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
+ * @param key
+ * A key string.
+ * @param defaultValue
+ * The default.
+ * @return An object which is the value.
*/
public long optLong(String key, long defaultValue) {
try {
@@ -950,34 +962,34 @@ public class JSONObject {
}
}
-
/**
- * Get an optional string associated with a key.
- * It returns an empty string if there is no such key. If the value is not
- * a string and is not null, then it is converted to a string.
+ * Get an optional string associated with a key. It returns an empty string
+ * if there is no such key. If the value is not a string and is not null,
+ * then it is converted to a string.
*
- * @param key A key string.
- * @return A string which is the value.
+ * @param key
+ * A key string.
+ * @return A string which is the value.
*/
public String optString(String key) {
return this.optString(key, "");
}
-
/**
- * Get an optional string associated with a key.
- * It returns the defaultValue if there is no such key.
+ * Get an optional string associated with a key. It returns the defaultValue
+ * if there is no such key.
*
- * @param key A key string.
- * @param defaultValue The default.
- * @return A string which is the value.
+ * @param key
+ * A key string.
+ * @param defaultValue
+ * The default.
+ * @return A string which is the value.
*/
public String optString(String key, String defaultValue) {
Object object = this.opt(key);
return NULL.equals(object) ? defaultValue : object.toString();
}
-
private void populateMap(Object bean) {
Class klass = bean.getClass();
@@ -985,9 +997,8 @@ public class JSONObject {
boolean includeSuperClass = klass.getClassLoader() != null;
- Method[] methods = includeSuperClass
- ? klass.getMethods()
- : klass.getDeclaredMethods();
+ Method[] methods = includeSuperClass ? klass.getMethods() : klass
+ .getDeclaredMethods();
for (int i = 0; i < methods.length; i += 1) {
try {
Method method = methods[i];
@@ -995,8 +1006,8 @@ public class JSONObject {
String name = method.getName();
String key = "";
if (name.startsWith("get")) {
- if ("getClass".equals(name) ||
- "getDeclaringClass".equals(name)) {
+ if ("getClass".equals(name)
+ || "getDeclaringClass".equals(name)) {
key = "";
} else {
key = name.substring(3);
@@ -1004,17 +1015,17 @@ public class JSONObject {
} else if (name.startsWith("is")) {
key = name.substring(2);
}
- if (key.length() > 0 &&
- Character.isUpperCase(key.charAt(0)) &&
- method.getParameterTypes().length == 0) {
+ if (key.length() > 0
+ && Character.isUpperCase(key.charAt(0))
+ && method.getParameterTypes().length == 0) {
if (key.length() == 1) {
key = key.toLowerCase();
} else if (!Character.isUpperCase(key.charAt(1))) {
- key = key.substring(0, 1).toLowerCase() +
- key.substring(1);
+ key = key.substring(0, 1).toLowerCase()
+ + key.substring(1);
}
- Object result = method.invoke(bean, (Object[])null);
+ Object result = method.invoke(bean, (Object[]) null);
if (result != null) {
this.map.put(key, wrap(result));
}
@@ -1025,27 +1036,31 @@ public class JSONObject {
}
}
-
/**
* Put a key/boolean pair in the JSONObject.
*
- * @param key A key string.
- * @param value A boolean which is the value.
+ * @param key
+ * A key string.
+ * @param value
+ * A boolean which is the value.
* @return this.
- * @throws JSONException If the key is null.
+ * @throws JSONException
+ * If the key is null.
*/
public JSONObject put(String key, boolean value) throws JSONException {
this.put(key, value ? Boolean.TRUE : Boolean.FALSE);
return this;
}
-
/**
* Put a key/value pair in the JSONObject, where the value will be a
* JSONArray which is produced from a Collection.
- * @param key A key string.
- * @param value A Collection value.
- * @return this.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * A Collection value.
+ * @return this.
* @throws JSONException
*/
public JSONObject put(String key, Collection value) throws JSONException {
@@ -1053,55 +1068,63 @@ public class JSONObject {
return this;
}
-
/**
* Put a key/double pair in the JSONObject.
*
- * @param key A key string.
- * @param value A double which is the value.
+ * @param key
+ * A key string.
+ * @param value
+ * A double which is the value.
* @return this.
- * @throws JSONException If the key is null or if the number is invalid.
+ * @throws JSONException
+ * If the key is null or if the number is invalid.
*/
public JSONObject put(String key, double value) throws JSONException {
this.put(key, new Double(value));
return this;
}
-
/**
* Put a key/int pair in the JSONObject.
*
- * @param key A key string.
- * @param value An int which is the value.
+ * @param key
+ * A key string.
+ * @param value
+ * An int which is the value.
* @return this.
- * @throws JSONException If the key is null.
+ * @throws JSONException
+ * If the key is null.
*/
public JSONObject put(String key, int value) throws JSONException {
this.put(key, new Integer(value));
return this;
}
-
/**
* Put a key/long pair in the JSONObject.
*
- * @param key A key string.
- * @param value A long which is the value.
+ * @param key
+ * A key string.
+ * @param value
+ * A long which is the value.
* @return this.
- * @throws JSONException If the key is null.
+ * @throws JSONException
+ * If the key is null.
*/
public JSONObject put(String key, long value) throws JSONException {
this.put(key, new Long(value));
return this;
}
-
/**
* Put a key/value pair in the JSONObject, where the value will be a
* JSONObject which is produced from a Map.
- * @param key A key string.
- * @param value A Map value.
- * @return this.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * A Map value.
+ * @return this.
* @throws JSONException
*/
public JSONObject put(String key, Map value) throws JSONException {
@@ -1109,26 +1132,28 @@ public class JSONObject {
return this;
}
-
/**
- * Put a key/value pair in the JSONObject. If the value is null,
- * then the key will be removed from the JSONObject if it is present.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
+ * Put a key/value pair in the JSONObject. If the value is null, then the
+ * key will be removed from the JSONObject if it is present.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long,
+ * String, or the JSONObject.NULL object.
* @return this.
- * @throws JSONException If the value is non-finite number
- * or if the key is null.
+ * @throws JSONException
+ * If the value is non-finite number or if the key is null.
*/
public JSONObject put(String key, Object value) throws JSONException {
String pooled;
if (key == null) {
- throw new JSONException("Null key.");
+ throw new NullPointerException("Null key.");
}
if (value != null) {
testValidity(value);
- pooled = (String)keyPool.get(key);
+ pooled = (String) keyPool.get(key);
if (pooled == null) {
if (keyPool.size() >= keyPoolSize) {
keyPool = new HashMap(keyPoolSize);
@@ -1144,15 +1169,16 @@ public class JSONObject {
return this;
}
-
/**
- * Put a key/value pair in the JSONObject, but only if the key and the
- * value are both non-null, and only if there is not already a member
- * with that name.
+ * Put a key/value pair in the JSONObject, but only if the key and the value
+ * are both non-null, and only if there is not already a member with that
+ * name.
+ *
* @param key
* @param value
* @return his.
- * @throws JSONException if the key is a duplicate
+ * @throws JSONException
+ * if the key is a duplicate
*/
public JSONObject putOnce(String key, Object value) throws JSONException {
if (key != null && value != null) {
@@ -1164,16 +1190,19 @@ public class JSONObject {
return this;
}
-
/**
- * Put a key/value pair in the JSONObject, but only if the
- * key and the value are both non-null.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
+ * Put a key/value pair in the JSONObject, but only if the key and the value
+ * are both non-null.
+ *
+ * @param key
+ * A key string.
+ * @param value
+ * An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long,
+ * String, or the JSONObject.NULL object.
* @return this.
- * @throws JSONException If the value is a non-finite number.
+ * @throws JSONException
+ * If the value is a non-finite number.
*/
public JSONObject putOpt(String key, Object value) throws JSONException {
if (key != null && value != null) {
@@ -1182,14 +1211,15 @@ public class JSONObject {
return this;
}
-
/**
* Produce a string in double quotes with backslash sequences in all the
* right places. A backslash will be inserted within , producing <\/,
- * allowing JSON text to be delivered in HTML. In JSON text, a string
- * cannot contain a control character or an unescaped quote or backslash.
- * @param string A String
- * @return A String correctly formatted for insertion in a JSON text.
+ * allowing JSON text to be delivered in HTML. In JSON text, a string cannot
+ * contain a control character or an unescaped quote or backslash.
+ *
+ * @param string
+ * A String
+ * @return A String correctly formatted for insertion in a JSON text.
*/
public static String quote(String string) {
StringWriter sw = new StringWriter();
@@ -1264,9 +1294,11 @@ public class JSONObject {
/**
* Remove a name and its value, if present.
- * @param key The name to be removed.
- * @return The value that was associated with the name,
- * or null if there was no value.
+ *
+ * @param key
+ * The name to be removed.
+ * @return The value that was associated with the name, or null if there was
+ * no value.
*/
public Object remove(String key) {
return this.map.remove(key);
@@ -1275,7 +1307,9 @@ public class JSONObject {
/**
* 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.
+ *
+ * @param string
+ * A String.
* @return A simple JSON value.
*/
public static Object stringToValue(String string) {
@@ -1294,66 +1328,69 @@ public class JSONObject {
}
/*
- * If it might be a number, try converting it.
- * If a number cannot be produced, then the value will just
- * be a string. Note that the plus and implied string
- * conventions are non-standard. A JSON parser may accept
- * non-JSON forms as long as it accepts all correct JSON forms.
+ * If it might be a number, try converting it. If a number cannot be
+ * produced, then the value will just be a string.
*/
char b = string.charAt(0);
- if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') {
+ if ((b >= '0' && b <= '9') || b == '-') {
try {
- if (string.indexOf('.') > -1 ||
- string.indexOf('e') > -1 || string.indexOf('E') > -1) {
+ if (string.indexOf('.') > -1 || string.indexOf('e') > -1
+ || string.indexOf('E') > -1) {
d = Double.valueOf(string);
if (!d.isInfinite() && !d.isNaN()) {
return d;
}
} else {
Long myLong = new Long(string);
- if (myLong.longValue() == myLong.intValue()) {
- return new Integer(myLong.intValue());
- } else {
- return myLong;
+ if (string.equals(myLong.toString())) {
+ if (myLong.longValue() == myLong.intValue()) {
+ return new Integer(myLong.intValue());
+ } else {
+ return myLong;
+ }
}
}
- } catch (Exception ignore) {
+ } catch (Exception ignore) {
}
}
return string;
}
-
/**
* Throw an exception if the object is a NaN or infinite number.
- * @param o The object to test.
- * @throws JSONException If o is a non-finite number.
+ *
+ * @param o
+ * The object to test.
+ * @throws JSONException
+ * If o is a non-finite number.
*/
public static void testValidity(Object o) throws JSONException {
if (o != null) {
if (o instanceof Double) {
- if (((Double)o).isInfinite() || ((Double)o).isNaN()) {
+ if (((Double) o).isInfinite() || ((Double) o).isNaN()) {
throw new JSONException(
- "JSON does not allow non-finite numbers.");
+ "JSON does not allow non-finite numbers.");
}
} else if (o instanceof Float) {
- if (((Float)o).isInfinite() || ((Float)o).isNaN()) {
+ if (((Float) o).isInfinite() || ((Float) o).isNaN()) {
throw new JSONException(
- "JSON does not allow non-finite numbers.");
+ "JSON does not allow non-finite numbers.");
}
}
}
}
-
/**
* Produce a JSONArray containing the values of the members of this
* JSONObject.
- * @param names A JSONArray containing a list of key strings. This
- * determines the sequence of the values in the result.
+ *
+ * @param names
+ * A JSONArray containing a list of key strings. This determines
+ * the sequence of the values in the result.
* @return A JSONArray of values.
- * @throws JSONException If any of the values are non-finite numbers.
+ * @throws JSONException
+ * If any of the values are non-finite numbers.
*/
public JSONArray toJSONArray(JSONArray names) throws JSONException {
if (names == null || names.length() == 0) {
@@ -1367,16 +1404,16 @@ public class JSONObject {
}
/**
- * Make a JSON text of this JSONObject. For compactness, no whitespace
- * is added. If this would not result in a syntactically correct JSON text,
+ * Make a JSON text of this JSONObject. For compactness, no whitespace is
+ * added. If this would not result in a syntactically correct JSON text,
* then null will be returned instead.
*
* Warning: This method assumes that the data structure is acyclical.
*
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with {
(left brace) and ending
- * with }
(right brace).
+ * @return a printable, displayable, portable, transmittable representation
+ * of the object, beginning with {
(left
+ * brace) and ending with }
(right
+ * brace).
*/
public String toString() {
try {
@@ -1386,18 +1423,19 @@ public class JSONObject {
}
}
-
/**
* Make a prettyprinted JSON text of this JSONObject.
*
* Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with {
(left brace) and ending
- * with }
(right brace).
- * @throws JSONException If the object contains an invalid number.
+ *
+ * @param indentFactor
+ * The number of spaces to add to each level of indentation.
+ * @return a printable, displayable, portable, transmittable representation
+ * of the object, beginning with {
(left
+ * brace) and ending with }
(right
+ * brace).
+ * @throws JSONException
+ * If the object contains an invalid number.
*/
public String toString(int indentFactor) throws JSONException {
StringWriter w = new StringWriter();
@@ -1408,24 +1446,27 @@ public class JSONObject {
/**
* Make a JSON text of an Object value. If the object has an
- * value.toJSONString() method, then that method will be used to produce
- * the JSON text. The method is required to produce a strictly
- * conforming text. If the object does not contain a toJSONString
- * method (which is the most common case), then a text will be
- * produced by other means. If the value is an array or Collection,
- * then a JSONArray will be made from it and its toJSONString method
- * will be called. If the value is a MAP, then a JSONObject will be made
- * from it and its toJSONString method will be called. Otherwise, the
- * value's toString method will be called, and the result will be quoted.
+ * value.toJSONString() method, then that method will be used to produce the
+ * JSON text. The method is required to produce a strictly conforming text.
+ * If the object does not contain a toJSONString method (which is the most
+ * common case), then a text will be produced by other means. If the value
+ * is an array or Collection, then a JSONArray will be made from it and its
+ * toJSONString method will be called. If the value is a MAP, then a
+ * JSONObject will be made from it and its toJSONString method will be
+ * called. Otherwise, the value's toString method will be called, and the
+ * result will be quoted.
*
*
* Warning: This method assumes that the data structure is acyclical.
- * @param value The value to be serialized.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with {
(left brace) and ending
- * with }
(right brace).
- * @throws JSONException If the value is or contains an invalid number.
+ *
+ * @param value
+ * The value to be serialized.
+ * @return a printable, displayable, transmittable representation of the
+ * object, beginning with {
(left
+ * brace) and ending with }
(right
+ * brace).
+ * @throws JSONException
+ * If the value is or contains an invalid number.
*/
public static String valueToString(Object value) throws JSONException {
if (value == null || value.equals(null)) {
@@ -1434,27 +1475,27 @@ public class JSONObject {
if (value instanceof JSONString) {
Object object;
try {
- object = ((JSONString)value).toJSONString();
+ object = ((JSONString) value).toJSONString();
} catch (Exception e) {
throw new JSONException(e);
}
if (object instanceof String) {
- return (String)object;
+ return (String) object;
}
throw new JSONException("Bad value from toJSONString: " + object);
}
if (value instanceof Number) {
return numberToString((Number) value);
}
- if (value instanceof Boolean || value instanceof JSONObject ||
- value instanceof JSONArray) {
+ if (value instanceof Boolean || value instanceof JSONObject
+ || value instanceof JSONArray) {
return value.toString();
}
if (value instanceof Map) {
- return new JSONObject((Map)value).toString();
+ return new JSONObject((Map) value).toString();
}
if (value instanceof Collection) {
- return new JSONArray((Collection)value).toString();
+ return new JSONArray((Collection) value).toString();
}
if (value.getClass().isArray()) {
return new JSONArray(value).toString();
@@ -1462,73 +1503,68 @@ public class JSONObject {
return quote(value.toString());
}
- /**
- * Wrap an object, if necessary. If the object is null, return the NULL
- * object. If it is an array or collection, wrap it in a JSONArray. If
- * it is a map, wrap it in a JSONObject. If it is a standard property
- * (Double, String, et al) then it is already wrapped. Otherwise, if it
- * comes from one of the java packages, turn it into a string. And if
- * it doesn't, try to wrap it in a JSONObject. If the wrapping fails,
- * then null is returned.
- *
- * @param object The object to wrap
- * @return The wrapped value
- */
- public static Object wrap(Object object) {
- try {
- if (object == null) {
- return NULL;
- }
- if (object instanceof JSONObject || object instanceof JSONArray ||
- NULL.equals(object) || object instanceof JSONString ||
- object instanceof Byte || object instanceof Character ||
- object instanceof Short || object instanceof Integer ||
- object instanceof Long || object instanceof Boolean ||
- object instanceof Float || object instanceof Double ||
- object instanceof String) {
- return object;
- }
+ /**
+ * Wrap an object, if necessary. If the object is null, return the NULL
+ * object. If it is an array or collection, wrap it in a JSONArray. If it is
+ * a map, wrap it in a JSONObject. If it is a standard property (Double,
+ * String, et al) then it is already wrapped. Otherwise, if it comes from
+ * one of the java packages, turn it into a string. And if it doesn't, try
+ * to wrap it in a JSONObject. If the wrapping fails, then null is returned.
+ *
+ * @param object
+ * The object to wrap
+ * @return The wrapped value
+ */
+ public static Object wrap(Object object) {
+ try {
+ if (object == null) {
+ return NULL;
+ }
+ if (object instanceof JSONObject || object instanceof JSONArray
+ || NULL.equals(object) || object instanceof JSONString
+ || object instanceof Byte || object instanceof Character
+ || object instanceof Short || object instanceof Integer
+ || object instanceof Long || object instanceof Boolean
+ || object instanceof Float || object instanceof Double
+ || object instanceof String) {
+ return object;
+ }
- if (object instanceof Collection) {
- return new JSONArray((Collection)object);
- }
- if (object.getClass().isArray()) {
- return new JSONArray(object);
- }
- if (object instanceof Map) {
- return new JSONObject((Map)object);
- }
- Package objectPackage = object.getClass().getPackage();
- String objectPackageName = objectPackage != null
- ? objectPackage.getName()
- : "";
- if (
- objectPackageName.startsWith("java.") ||
- objectPackageName.startsWith("javax.") ||
- object.getClass().getClassLoader() == null
- ) {
- return object.toString();
- }
- return new JSONObject(object);
- } catch(Exception exception) {
- return null;
- }
- }
-
-
- /**
- * Write the contents of the JSONObject as JSON text to a writer.
- * For compactness, no whitespace is added.
- *
- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) throws JSONException { - return this.write(writer, 0, 0); + if (object instanceof Collection) { + return new JSONArray((Collection) object); + } + if (object.getClass().isArray()) { + return new JSONArray(object); + } + if (object instanceof Map) { + return new JSONObject((Map) object); + } + Package objectPackage = object.getClass().getPackage(); + String objectPackageName = objectPackage != null ? objectPackage + .getName() : ""; + if (objectPackageName.startsWith("java.") + || objectPackageName.startsWith("javax.") + || object.getClass().getClassLoader() == null) { + return object.toString(); + } + return new JSONObject(object); + } catch (Exception exception) { + return null; + } } + /** + * Write the contents of the JSONObject as JSON text to a writer. For + * compactness, no whitespace is added. + *
+ * Warning: This method assumes that the data structure is acyclical. + * + * @return The writer. + * @throws JSONException + */ + public Writer write(Writer writer) throws JSONException { + return this.write(writer, 0, 0); + } static final Writer writeValue(Writer writer, Object value, int indentFactor, int indent) throws JSONException, IOException { @@ -1624,5 +1660,5 @@ public class JSONObject { } catch (IOException exception) { throw new JSONException(exception); } - } + } }