/** * 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. * * <p>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. */ public JSONObject accumulate(String key, Object value) throws JSONException { testValidity(value); Object object = opt(key); if (object == null) { put(key.toLowerCase(), value instanceof JSONArray ? new JSONArray().put(value) : value); } else if (object instanceof JSONArray) { ((JSONArray) object).put(value); } else { put(key.toLowerCase(), 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. * @return this. * @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); Object object = opt(key); if (object == null) { put(key.toLowerCase(), new JSONArray().put(value)); } else if (object instanceof JSONArray) { put(key.toLowerCase(), ((JSONArray) object).put(value)); } else { throw new JSONException("JSONObject[" + key + "] is not a JSONArray."); } 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. * @return this. * @throws JSONException If the value is non-finite number or if the key is null. */ public JSONObject put(String key, Object value) throws JSONException { if (key == null) { throw new JSONException("Null key."); } if (value != null) { testValidity(value); this.map.put(key, value); } else { remove(key); } return this; }
/** * Produce a string from a Number. * * @param number A Number * @return A String. * @throws JSONException If n is a non-finite number. */ public static String numberToString(Number number) throws JSONException { if (number == null) { throw new JSONException("Null pointer"); } testValidity(number); // 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) { while (string.endsWith("0")) { string = string.substring(0, string.length() - 1); } if (string.endsWith(".")) { string = string.substring(0, string.length() - 1); } } return string; }