【发布时间】:2013-02-03 14:24:27
【问题描述】:
我正在做一个项目,我必须从 JSON 数组中清除所有数据。似乎没有像 jsonArray.clear() 这样的方法。还尝试了 jsonArray = new JSONArray()。那也没有奏效。请提出建议
【问题讨论】:
-
为什么 jsonArray = new JSONArray() 不起作用?
我正在做一个项目,我必须从 JSON 数组中清除所有数据。似乎没有像 jsonArray.clear() 这样的方法。还尝试了 jsonArray = new JSONArray()。那也没有奏效。请提出建议
【问题讨论】:
只需创建一个新的 JSONArray。
JSONArray otherJsonArray = new JSONArray();
或者遍历数组和remove(int index)索引。
http://www.json.org/javadoc/org/json/JSONArray.html#remove(int)
【讨论】:
remove?它不是静态的,所以这并不奇怪。这是一个实例方法,应该是jsonArray.remove();除非你没有使用相同的 org.json.JSONArray 对象?
只需输入jsonArray = new JSONArray()
【讨论】:
创建一个新对象会起作用,除非您将它作为参数传递给方法,在这种情况下,您需要修改引用的对象,因为调用方法不会看到新的引用。
因此,如果是这种情况,请向后执行,这样您的迭代器就不会超出界限:
int startingLength = someJsonArray.length();
for (int i = startingLength - 1; i >= 0; i--) {
someJsonArray.remove(i);
}
【讨论】:
然后你使用它 otherJsonArray 已经存在然后你使用
JSONArray otherJsonArray = new JSONArray("[]");
【讨论】:
我们可以使用 someJsonArray.pop(index) 来移除 require 记录。 我们可以在循环中使用此代码来删除所有记录。
【讨论】:
我有一种情况,我想从带有键“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();
}
【讨论】: