我需要在安卓上克隆一个JSONObject。我知道有一种简单的方法:
JSONObject clone = new JSONObject(original.toString());
但以某种方式,用这种方法感觉不对/很慢。我找到了这个:https://dev59.com/ZWcs5IYBdhLWcg3wfEDa#12809884 ,但在Android上我没有JSONObject.getNames - 有人有关于如何做到这一点的好建议吗?
我需要在安卓上克隆一个JSONObject。我知道有一种简单的方法:
JSONObject clone = new JSONObject(original.toString());
但以某种方式,用这种方法感觉不对/很慢。我找到了这个:https://dev59.com/ZWcs5IYBdhLWcg3wfEDa#12809884 ,但在Android上我没有JSONObject.getNames - 有人有关于如何做到这一点的好建议吗?
JSONObject clone= new JSONObject(original.toMap());
你的解决方案效率低下,需要对对象进行序列化,然后重新解析字符串。
最简单、最高效的解决方案是:
JSONObject copy = new JSONObject();
for (Object key : original.keySet()) {
Object value = original.get(key);
copy.put(key, value);
}
浅复制
已经指明只有顶层会被复制。 - Gibolt你可以用以下方式实现:
public JSONObject shallowCopy(JSONObject original) {
JSONObject copy = new JSONObject();
for ( Iterator<String> iterator = original.keys(); iterator.hasNext(); ) {
String key = iterator.next();
JSONObject value = original.optJSONObject(key);
try {
copy.put(key, value);
} catch ( JSONException e ) {
//TODO process exception
}
}
return copy;
}
但请记住,这不是深拷贝。
names
方法,它返回一个名字的JSONArray。我同意,这有点额外负担,但应该能用。 - Blackbelt