关于问题Android (JSONObject) How can I loop through a flat JSON object to get each key and each value,我使用Franci Penov的答案来执行我的JSON项目的迭代。
我的问题是,当我找到我想要的东西时,我想删除它。但是,如果嵌套的JSON对象中可能有多个具有相同ID的项目,我怎么知道是否要删除正确的JSON密钥?
有我的代码:
public JSONObject parseJSON(JSONObject json)
{
Iterator<String> iter = json.keys();
while (iter.hasNext())
{
String key = iter.next();
if (key.equals("-xmlns:i") ||
key.equals("-i:nil") ||
key.equals("-xmlns:d4p1") ||
key.equals("-i:type") ||
key.equals("#text")) // I want to delete items with those ID strings
{
json.remove(key);
}
//Object value = json.get(key);
}
return json;
}
答案 0 :(得分:0)
您可以通过调用optJSONObject(key)来检查它是否是JSONObject,如果不是,则返回null。如果它是JSONObject,则递归调用方法parseJSON()以确保在最终嵌套对象中也删除了键。如果你有大量的嵌套数据,你可以考虑在没有递归的情况下实现它,以避免StackOverflowError
public JSONObject parseJSON(JSONObject json) {
Iterator<String> iter = json.keys();
while (iter.hasNext()) {
String key = iter.next();
JSONObject valueAsJsOnObject = json.optJSONObject(key);
//if it is not null and therefore a valid JSONObject, call your method recursively
if (valueAsJsOnObject != null) {
parseJSON(valueAsJsOnObject);
} else if (key.equals("-xmlns:i") ||
key.equals("-i:nil") ||
key.equals("-xmlns:d4p1") ||
key.equals("-i:type") ||
key.equals("#text")) // I want to delete items with those ID strings
{
json.remove(key);
}
//Object value = json.get(key);
}
return json;
}