【问题标题】:Remove specific values in a JSONArray删除 JSONArray 中的特定值
【发布时间】:2017-06-25 18:33:21
【问题描述】:

我有一个包含可选项目的 RecyclerView。如果选择了一个项目,我会在它的 JSONObject("selected": true) 中放置一个新字段。下面是我的来自 logcat 的 JSONArray,称为 (filteredList)。

这是我的过滤列表 JSON:

[{
"nr": 1,
"grpnr": 0,
"bezeich": "MORE SALT",
"selected": true
}, {
"nr": 2,
"grpnr": 0,
"bezeich": "MORE SWEET"
}, {
"nr": 3,
"grpnr": 0,
"bezeich": "MORE PEPPER"
}, {
"nr": 4,
"grpnr": 0,
"bezeich": "MORE CHILLI",
"selected": true
}, {
"nr": 5,
"grpnr": 0,
"bezeich": "COLD"
}, {
"nr": 6,
"grpnr": 0,
"bezeich": "HOT"
}, {
"nr": 7,
"grpnr": 0,
"bezeich": "SMALL"
}, {
"nr": 8,
"grpnr": 0,
"bezeich": "LARGE"
}, {
"nr": 9,
"grpnr": 0,
"bezeich": "MEDIUM COOKED"
}, {
"nr": 10,
"grpnr": 0,
"bezeich": "WELL DONE"
}]

我想让我的过滤列表 JSON 看起来像这样(基本上删除所有 selected 字段):

[{
"nr": 1,
"grpnr": 0,
"bezeich": "MORE SALT"
}, {
"nr": 2,
"grpnr": 0,
"bezeich": "MORE SWEET"
}, {
"nr": 3,
"grpnr": 0,
"bezeich": "MORE PEPPER"
}, {
"nr": 4,
"grpnr": 0,
"bezeich": "MORE CHILLI"
}, {
"nr": 5,
"grpnr": 0,
"bezeich": "COLD"
}, {
"nr": 6,
"grpnr": 0,
"bezeich": "HOT"
}, {
"nr": 7,
"grpnr": 0,
"bezeich": "SMALL"
}, {
"nr": 8,
"grpnr": 0,
"bezeich": "LARGE"
}, {
"nr": 9,
"grpnr": 0,
"bezeich": "MEDIUM COOKED"
}, {
"nr": 10,
"grpnr": 0,
"bezeich": "WELL DONE"
}]

如我们所见,某些对象具有字段"selected"。我想知道如何只删除这个字段。我尝试了thisthis,但在我的情况下它不起作用。任何答案都会有所帮助,在此先感谢!

它不起作用,因为我的 CheckBox 只删除了最后一个选中的项目。

这是我的代码 sn-p:

JSONObject check = new JSONObject();
    try {
        check = orderList.getJSONObject(intCurrArticleNr);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(check.has("spesial-request")) {
        try {
            String arrayRemarkString = check.getString("spesial-request");

            if (remarkObj.toString().equalsIgnoreCase(arrayRemarkString)) {
                currRemark = new JSONArray(check.getString("spesial-request"));
                edt_reqList.setText(currRemark.toString().trim());

                System.out.println(currRemark);
            }
            else {
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    else {

// here i have a probelem //
        remarkObj = new JSONArray();
//            objectReqList.remove("selected");

        int len = filteredReqList.length();
        JSONArray teslist = new JSONArray();
        if (filteredReqList == null) {
            for (int i=0;i<len;i++){
                filteredReqList.remove(i);
            }
        }
    }

【问题讨论】:

  • 你的意思是它不工作?它会抛出异常吗?它只是不删除字段吗?请详细说明。还向我们展示了预期的 json 与你得到的 json。最后一些代码会很好,所以我们可以看到你做错了什么
  • 对不起,我会编辑
  • 在填充 Recycler 视图时检查 selected 是否存在,然后不要将其放入 recycler 视图中。它的一种方法也可能存在。
  • @jackjay 我会试试的,但我还是对这个案子很好奇
  • @MarioMargoPradipta 你可以迭代和删除,在下面查看我的答案 - 我用你的 JSON 测试过,它给了我预期的结果

标签: java json


【解决方案1】:

这应该可以解决问题:

for (int i = 0; i < filteredReqList.length(); i++) {
    JSONObject item = filteredReqList.getJSONObject(i);
    item.remove("selected");
}

【讨论】:

    【解决方案2】:

    你可以迭代和删除,试试下面 - 它工作正常。

    JSONParser parser = new JSONParser();
    
    Object obj = parser.parse(new FileReader(
            "sample.json"));
    
    JSONArray jsonArray = (JSONArray) obj;
    for (int i = 0; i < jsonArray.size(); i++) {
        System.out.println("Before --" + jsonArray.get(i).toString());
        JSONObject jsonObject = (JSONObject)jsonArray.get(i);
        jsonObject.remove("selected");
        System.out.println("After --" + jsonArray.get(i).toString());
    }
    System.out.println("Final Output --" + jsonArray.toString());
    

    输出 -

    Before --{"selected":true,"nr":1,"grpnr":0,"bezeich":"MORE SALT"}
    After --{"nr":1,"grpnr":0,"bezeich":"MORE SALT"} 
    Before --{"nr":2,"grpnr":0,"bezeich":"MORE SWEET"} 
    After --{"nr":2,"grpnr":0,"bezeich":"MORE SWEET"} 
    Before --{"nr":3,"grpnr":0,"bezeich":"MORE PEPPER"} 
    After --{"nr":3,"grpnr":0,"bezeich":"MORE PEPPER"} 
    Before --{"selected":true,"nr":4,"grpnr":0,"bezeich":"MORE CHILLI"} 
    After --{"nr":4,"grpnr":0,"bezeich":"MORE CHILLI"} 
    Before --{"nr":5,"grpnr":0,"bezeich":"COLD"} 
    After --{"nr":5,"grpnr":0,"bezeich":"COLD"} 
    Before --{"nr":6,"grpnr":0,"bezeich":"HOT"} 
    After --{"nr":6,"grpnr":0,"bezeich":"HOT"} 
    Before --{"nr":7,"grpnr":0,"bezeich":"SMALL"} 
    After --{"nr":7,"grpnr":0,"bezeich":"SMALL"} 
    Before --{"nr":8,"grpnr":0,"bezeich":"LARGE"} 
    After --{"nr":8,"grpnr":0,"bezeich":"LARGE"} 
    Before --{"nr":9,"grpnr":0,"bezeich":"MEDIUM COOKED"} 
    After --{"nr":9,"grpnr":0,"bezeich":"MEDIUM COOKED"} 
    Before --{"nr":10,"grpnr":0,"bezeich":"WELL DONE"} 
    After --{"nr":10,"grpnr":0,"bezeich":"WELL DONE"} 
    Final Output -- [{
        "nr": 1,
        "grpnr": 0,
        "bezeich": "MORE SALT"
    }, {
        "nr": 2,
        "grpnr": 0,
        "bezeich": "MORE SWEET"
    }, {
        "nr": 3,
        "grpnr": 0,
        "bezeich": "MORE PEPPER"
    }, {
        "nr": 4,
        "grpnr": 0,
        "bezeich": "MORE CHILLI"
    }, {
        "nr": 5,
        "grpnr": 0,
        "bezeich": "COLD"
    }, {
        "nr": 6,
        "grpnr": 0,
        "bezeich": "HOT"
    }, {
        "nr": 7,
        "grpnr": 0,
        "bezeich": "SMALL"
    }, {
        "nr": 8,
        "grpnr": 0,
        "bezeich": "LARGE"
    }, {
        "nr": 9,
        "grpnr": 0,
        "bezeich": "MEDIUM COOKED"
    }, {
        "nr": 10,
        "grpnr": 0,
        "bezeich": "WELL DONE"
    }]
    

    【讨论】:

    • 好!!谢谢@MarioMargoPradipta
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多