【问题标题】:How to erase the correct items of a nested JSON when I iterate it?迭代时如何删除嵌套 JSON 的正确项目?
【发布时间】:2023-03-26 03:03:01
【问题描述】:

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

【问题讨论】:

    标签: java android json parsing iterator


    【解决方案1】:

    你可以通过调用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;
    }
    

    【讨论】:

    • 使用iter.remove() 而不是json.remove(key)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2017-03-22
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2014-09-08
    相关资源
    最近更新 更多