2017-02-08 4 views
0

Ich habe einen RecyclerView mit auswählbaren Elementen darin. Wenn ein Element ausgewählt ist, lege ich ein neues Feld in sein JSONObject ("selected": true). Im Folgenden ist mein JSONArray von logcat (filterList) genannt.Entfernen Sie bestimmte Werte in einem JSONArray

Das ist mein 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" 
}] 

ich meine FilteredList JSON sieht wie folgt aus (im Wesentlichen die Beseitigung aller selected Felder) machen möchten:

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

Wie wir sehen, einige Objekt habe das Feld "selected". Ich möchte wissen, wie man nur dieses Feld löscht. Ich versuchte this und this, aber es funktioniert nicht in meinem Fall. Jede Antwort wird helfen, danke im Voraus!

Es funktioniert nicht, weil meine CheckBox nur das letzte überprüfte Element entfernt.

hier ist mein Code-Schnipsel:

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

Was meinen Sie es nicht funktioniert? Wird eine Ausnahme ausgelöst? Werden die Felder nicht einfach entfernt? Bitte erläutern. Zeigen Sie uns auch die erwartete json gegen die json Sie erhalten. Schließlich wäre ein Code schön, damit wir sehen können, was Sie falsch machen. – nbokmans

+0

Sorry, ich bearbeite –

+0

Während Sie Ihre Recycler-Ansicht ausfüllen, prüfen Sie, ob "ausgewählt" vorhanden ist, und legen Sie sie nicht in die Recycler-Ansicht. sein eine andere Annäherung kann auch dort sein. –

Antwort

1

Sie können einfach durchlaufen und entfernen, versuchen mit unten - es funktioniert gut.

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

Ausgang -

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

Arbeiten perfekt, danke für den Fortschritt –

+0

Gut !! Danke @MarioMargoPradipta –

1

Dies sollte den Trick:

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