如何清空JSON数组中的数据

10

我正在处理一个项目,其中需要清除JSON数组中的所有数据。似乎没有像 jsonArray.clear() 这样的方法。我也尝试了 jsonArray = new JSONArray() 。但这也没用。请给予建议。


5
为什么 jsonArray = new JSONArray() 不起作用? - thang
6个回答

10

但是JSONArray没有remove(int)方法。我的IDE没有显示出来。我正在使用Android开发工具(Eclipse)。 - Joseph
JSONArray上没有remove方法?这并不奇怪,因为它不是静态的。它是一个实例方法,应该是jsonArray.remove();除非你没有使用相同的org.json.JSONArray对象? - Anew
我正在使用 org.json.JSONArray 对象。我将该对象更改为静态,但它仍然没有 remove() 方法。 - Joseph
你误解了我的意思,这个方法应该存在于实例(jsonArray)上,而不是JSONArray类作为静态方法。 - Anew
1
如果你使用递增迭代来删除元素(index),第一次将是0,它将从A、B、C中删除"A"。在第二个循环中,使用1将删除"C",而对于第三个循环,由于C之后没有更多的元素,所以不会删除任何东西,因此它将返回B并不会删除整个数组。你需要使用递减迭代来实现这个功能。 - Gastón Saillén

4

只需输入 jsonArray = new JSONArray() 即可。


2

创建一个新的对象是可行的,除非您已将其作为参数传递给方法,在这种情况下,您需要修改所引用的对象,因为调用方法不会看到新的引用。

如果是这种情况,请反向操作,这样您就不会超出迭代器范围:

    int startingLength = someJsonArray.length();

    for (int i = startingLength - 1; i >= 0; i--) {

        someJsonArray.remove(i);

    }

1
如果otherJsonArray已经存在,那么你可以使用它。
JSONArray otherJsonArray = new JSONArray("[]");

0

我有这样一种情况,我想从一个JSONObject中的键为“Constants”的所有条目中删除它们,并创建一个新的JSONArray并将其分配给该键。但是,这样做并不能清除JSONArray,我必须遍历JSONArray并在每个元素上执行jsonArray.remove(i)操作,但是还有第二种方法可以实现,即完全从JSONObject中删除数组元素,在这种情况下是“Constants”,然后重新添加它作为新的JSONArray。

以下是代码示例,使用新数组进行赋值,但不起作用,JSONArray保持不变:(我尝试了上面两种建议,即new JSONArray();和new JSONArray("[]");)

        JSONObject jsonObj = new JSONObject(metadataOriginalJSON);
        if (jsonObj.isJSONArray("Constants")) {
            JSONArray constantsArray = jsonObj.getJSONArray("Constants");
            constantsArray = new JSONArray();
            metadataConstantsRemoved = jsonObj.toString();
        }

这是遍历JSONArray的代码,它可以正常工作:

  JSONObject jsonObj = new JSONObject(metadataOriginalJSON);
  if (jsonObj.isJSONArray("Constants")) {
      JSONArray constantsArray = jsonObj.getJSONArray("Constants");
      int i = 0;
      int arrayLenSanityCheckPreventEndlessLoop = constantsArray.length();
      while (constantsArray.length() > 0 && i < arrayLenSanityCheckPreventEndlessLoop) {
          constantsArray.remove(0);
          i++;
      }
      metadataConstantsRemoved = jsonObj.toString();
  }

第二种方法是通过删除整个JSONArray元素并将其重新添加到JSONObject中来实现的:

  JSONObject jsonObj = new JSONObject(metadataOriginalJSON);
  if (jsonObj.isJSONArray("Constants")) {
      jsonObj.remove("Constants");
      jsonObj.put("Constants", new JSONArray());
      metadataConstantsRemoved = jsonObj.toString();
  }


0
我们可以使用 someJsonArray.pop(index) 来删除所需的记录。 我们可以在循环中使用此代码来删除所有记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接