如何在Java中克隆org.json.JSONObject?

Dan*_*fer 40 java json org.json

有没有办法克隆一个实例org.json.JSONObject而不对其进行字符串化并重新分析结果?

浅拷贝是可以接受的.

Jay*_*juh 68

最简单(并且速度极慢且效率低)的方法

JSONObject clone = new JSONObject(original.toString());
Run Code Online (Sandbox Code Playgroud)

  • 但是,看起来像是深度克隆的简单方法. (16认同)
  • 该死的,我为什么没想到这个:P (3认同)
  • 那将是字符串化和解析结果,我说我不想这样做。 (2认同)

Bil*_*ard 56

使用public JSONObject(JSONObject jo, java.lang.String[] names)构造函数和public static java.lang.String[] getNames(JSONObject jo)方法.

JSONObject copy = new JSONObject(original, JSONObject.getNames(original));
Run Code Online (Sandbox Code Playgroud)

  • 我想警告别人这个方法执行浅层复制,提问者想要但不要忘记它. (26认同)
  • 警告:`JSONObject.getNames(JSONObject instance)'在Android上不存在。 (3认同)

Ali*_*Ali 5

我发现的最快+最小的方法是这样的。它进行深复制。

JSONObject克隆=新的JSONObject(original.toMap());

我知道提问者说

浅拷贝是可以接受的。但我认为不排除该解决方案是否会进行深复制。

更新:toMap() 函数在 Android 中不可用。但在 groupId org.json 下的 maven 上可用的 org.json 库有它:https ://search.maven.org/artifact/org.json/json/20210307/bundle