如何在迭代时擦除嵌套JSON的正确项?

时间:2014-06-04 12:33:53

标签: java android json parsing iterator

关于问题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;
}

1 个答案:

答案 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;
}