【问题标题】:How to clear data from a JSON Array如何从 JSON 数组中清除数据
【发布时间】:2013-02-03 14:24:27
【问题描述】:

我正在做一个项目,我必须从 JSON 数组中清除所有数据。似乎没有像 jsonArray.clear() 这样的方法。还尝试了 jsonArray = new JSONArray()。那也没有奏效。请提出建议

【问题讨论】:

  • 为什么 jsonArray = new JSONArray() 不起作用?

标签: java android json arrays


【解决方案1】:

只需创建一个新的 JSONArray。

JSONArray otherJsonArray = new JSONArray();

或者遍历数组和remove(int index)索引。

http://www.json.org/javadoc/org/json/JSONArray.html#remove(int)

【讨论】:

  • 但是 JSONArray 没有方法 remove(int)。我的 IDE 没有显示。我正在使用 Android 开发工具(Eclipse)
  • 在 JSONArray 上没有方法 remove?它不是静态的,所以这并不奇怪。这是一个实例方法,应该是jsonArray.remove();除非你没有使用相同的 org.json.JSONArray 对象?
  • 我正在使用 org.json.JSONArray 对象。我将该对象更改为静态,但它仍然没有方法 remove()
  • 你误会了,方法应该存在于instance(jsonArray)上,而不是作为静态方法存在于JSONArray类中。
  • 如果你增量迭代到 remove(index) ,第一次将是 0 并且会删除让我们说从 A,B,C "A" 在第二个循环为 1 之后它将删除 "C" 和对于第三个循环,它不会删除任何内容,因为 C 之后没有更多的东西,所以它会返回 B 并且不会删除所有数组,你需要递减迭代来完成它
【解决方案2】:

只需输入jsonArray = new JSONArray()

【讨论】:

    【解决方案3】:

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

    因此,如果是这种情况,请向后执行,这样您的迭代器就不会超出界限:

        int startingLength = someJsonArray.length();
    
        for (int i = startingLength - 1; i >= 0; i--) {
    
            someJsonArray.remove(i);
    
        }
    

    【讨论】:

      【解决方案4】:

      然后你使用它 otherJsonArray 已经存在然后你使用

      JSONArray otherJsonArray = new JSONArray("[]");
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          我有一种情况,我想从带有键“Constants”的 JSONArray 中删除所有条目,它是 JSONObject 中的一个元素,创建一个新的 JSONArray 并分配它不会清除 JSONArray,我必须遍历JSONArray 和 jsonArray.remove(i) 在它们每个上,但是还有第二种方法可以工作,它涉及删除数组元素,在这种情况下,从 JSONObject 中完全删除“常量”并将其重新添加为新的 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();
            }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-15
            • 1970-01-01
            • 2015-07-23
            • 2011-02-10
            • 2022-01-08
            • 1970-01-01
            • 1970-01-01
            • 2019-03-16
            相关资源
            最近更新 更多