How do I remove a specific element from a JSONArray?
Как мне удалить определенный элемент из JSONArray?
Я создаю одно приложение, в котором запрашиваю PHP-файл с сервера. Этот PHP-файл возвращает JSONArray, содержащий JSONObjects в качестве элементов, например,
/* jArrayFavFans is the JSONArray i build from string i get from response. its giving me correct JSONArray */ JSONArray jArrayFavFans=newJSONArray(serverRespons); for (intj=0; j < jArrayFavFans.length(); j++) { try { if (jArrayFavFans.getJSONObject(j).getString("uniqid").equals(id_fav_remov)) { //jArrayFavFans.getJSONObject(j).remove(j); //$ I try this to remove element at the current index... But remove doesn't work here ???? $ //int index=jArrayFavFans.getInt(j); Toast.makeText(getParent(), "Object to remove...!" + id_fav_remov, Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Как мне удалить определенный элемент из этого JSONArray?
Переведено автоматически
Ответ 1
Попробуйте этот код
ArrayList<String> list = newArrayList<String>(); JSONArrayjsonArray= (JSONArray)jsonObject;
if (jsonArray != null) { intlen= jsonArray.length(); for (int i=0;i<len;i++){ list.add(jsonArray.get(i).toString()); } } //Remove the element from arraylist list.remove(position); //Recreate JSON Array JSONArrayjsArray=newJSONArray(list);
Редактировать: Использование ArrayList добавит "\" к ключу и значениям. Итак, используйте JSONArray сам
JSONArraylist=newJSONArray(); JSONArrayjsonArray=newJSONArray(jsonstring); intlen= jsonArray.length(); if (jsonArray != null) { for (int i=0;i<len;i++) { //Excluding the item at position if (i != position) { list.put(jsonArray.get(i)); } } }
Ответ 2
В случае, если кто-то вернется с тем же вопросом для платформы Android, вы не сможете использовать встроенный remove() метод, если вы ориентируетесь на Android API-18 или меньше. remove() Метод добавлен на 19-м уровне API. Таким образом, лучшее, что можно сделать, это расширить JSONArray, чтобы создать совместимое переопределение для remove() метода.
publicclassMJSONArrayextendsJSONArray {
@Override public Object remove(int index) {
JSONArrayoutput=newJSONArray(); intlen=this.length(); for (inti=0; i < len; i++) { if (i != index) { try { output.put(this.get(i)); } catch (JSONException e) { thrownewRuntimeException(e); } } } return output; //return this; If you need the input array in case of a failed attempt to remove an item. } }
Редактировать Как указал Дэниел, обработка ошибки без предупреждения - плохой стиль. Улучшен код.