JSONObject accumulate 和 put 有什么区别?
What is the difference between JSONObject accumulate and put?
我一直在尝试 JSON,我在文档 (JAVA) 中看到,JSONObject 的 put() 和 accumulate() 几乎做同样的事情?
那是什么?
我看到了 JSONObject 的 Java 源代码,accumulate 和 put 之间的区别在于 accumulate(String key,Object Value),如果 "key" 存在一些值,那么对象检查是否是一个数组,如果它是一个数组,则将 "value" 添加到数组中,否则将为此键创建一个数组。
但是,如果键存在,它的值将被值替换 - "value"
这里是JSONObject accumulate(String key, Object Value)的来源
/**
* Appends {@code value} to the array already mapped to {@code name}. If
* this object has no mapping for {@code name}, this inserts a new mapping.
* If the mapping exists but its value is not an array, the existing
* and new values are inserted in order into a new array which is itself
* mapped to {@code name}. In aggregate, this allows values to be added to a
* mapping one at a time.
*
* <p> Note that {@code append(String, Object)} provides better semantics.
* In particular, the mapping for {@code name} will <b>always</b> be a
* {@link JSONArray}. Using {@code accumulate} will result in either a
* {@link JSONArray} or a mapping whose type is the type of {@code value}
* depending on the number of calls to it.
*
* @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean,
* Integer, Long, Double, {@link #NULL} or null. May not be {@link
* Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}.
*/
public JSONObject accumulate(String name, Object value) throws JSONException {
Object current = nameValuePairs.get(checkName(name));
if (current == null) {
return put(name, value);
}
if (current instanceof JSONArray) {
JSONArray array = (JSONArray) current;
array.checkedPut(value);
} else {
JSONArray array = new JSONArray();
array.checkedPut(current);
array.checkedPut(value);
nameValuePairs.put(name, array);
}
return this;
}
这里是 JSONObject put (String key, Object value) 的代码
/**
* Maps {@code name} to {@code value}, clobbering any existing name/value
* mapping with the same name.
*
* @return this object.
*/
public JSONObject put(String name, boolean value) throws JSONException {
nameValuePairs.put(checkName(name), value);
return this;
}
我一直在尝试 JSON,我在文档 (JAVA) 中看到,JSONObject 的 put() 和 accumulate() 几乎做同样的事情?
那是什么?
我看到了 JSONObject 的 Java 源代码,accumulate 和 put 之间的区别在于 accumulate(String key,Object Value),如果 "key" 存在一些值,那么对象检查是否是一个数组,如果它是一个数组,则将 "value" 添加到数组中,否则将为此键创建一个数组。
但是,如果键存在,它的值将被值替换 - "value"
这里是JSONObject accumulate(String key, Object Value)的来源
/**
* Appends {@code value} to the array already mapped to {@code name}. If
* this object has no mapping for {@code name}, this inserts a new mapping.
* If the mapping exists but its value is not an array, the existing
* and new values are inserted in order into a new array which is itself
* mapped to {@code name}. In aggregate, this allows values to be added to a
* mapping one at a time.
*
* <p> Note that {@code append(String, Object)} provides better semantics.
* In particular, the mapping for {@code name} will <b>always</b> be a
* {@link JSONArray}. Using {@code accumulate} will result in either a
* {@link JSONArray} or a mapping whose type is the type of {@code value}
* depending on the number of calls to it.
*
* @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean,
* Integer, Long, Double, {@link #NULL} or null. May not be {@link
* Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}.
*/
public JSONObject accumulate(String name, Object value) throws JSONException {
Object current = nameValuePairs.get(checkName(name));
if (current == null) {
return put(name, value);
}
if (current instanceof JSONArray) {
JSONArray array = (JSONArray) current;
array.checkedPut(value);
} else {
JSONArray array = new JSONArray();
array.checkedPut(current);
array.checkedPut(value);
nameValuePairs.put(name, array);
}
return this;
}
这里是 JSONObject put (String key, Object value) 的代码
/**
* Maps {@code name} to {@code value}, clobbering any existing name/value
* mapping with the same name.
*
* @return this object.
*/
public JSONObject put(String name, boolean value) throws JSONException {
nameValuePairs.put(checkName(name), value);
return this;
}