簡體   English   中英

刪除JSONArray中的特定值

[英]Remove specific values in a JSONArray

我有一個帶有可選項目的RecyclerView。 如果選擇了一項,則將新字段放入其JSONObject(“ selected”:true)中。 以下是我從logcat調用(filteredList)的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"
}]

我想使我的filteredList 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" 我想知道如何僅刪除此字段。 我想這個這個 ,但它不是我的情況下工作。 任何答案都會有所幫助,在此先感謝!

它不起作用,因為我的CheckBox僅刪除了最后一個選中的項目。

這是我的代碼段:

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);
            }
        }
    }

您可以重復進行刪除,請嘗試以下操作-效果很好。

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"
}]

這應該可以解決問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM