Как удалить определенный элемент из JSONArray?

Я создаю одно приложение, в котором я запрашиваю PHP файл с сервера. Этот PHP файл возвращает JSONArray, элементами которого являются JSONObjects, например,

[ 
  {
    "uniqid":"h5Wtd", 
    "name":"Test_1", 
    "address":"tst", 
    "email":"ru_tst@tst.cc", 
    "mobile":"12345",
    "city":"ind"
  },
  {...},
  {...},
  ...
]

мой код:

/* jArrayFavFans is the JSONArray i build from string i get from response.
   its giving me correct JSONArray */
JSONArray jArrayFavFans=new JSONArray(serverRespons);
for (int j = 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?

29
задан Laurel 27 May 2016 в 22:54
поделиться

2 ответа

Я полагаю, вы используете версию Me, я предлагаю добавить этот блок функции вручную, в своем коде (JSONArray.java):

public Object remove(int index) {
    Object o = this.opt(index);
    this.myArrayList.removeElementAt(index);
    return o;
}

В Java-версии они используют ArrayList, в ME-версии они используйте Вектор.

1
ответ дан 28 November 2019 в 01:11
поделиться

Вы можете использовать отражение

Китайский веб-сайт предоставляет соответствующее решение: http://blog.csdn.net/peihang1354092549/article/details/41957369
Если вы не понимаете китайский, пожалуйста, попробуйте прочитать его с помощью программного обеспечения для перевода.

Он предоставляет этот код для старой версии:

public void JSONArray_remove(int index, JSONArray JSONArrayObject) throws Exception{
    if(index < 0)
        return;
    Field valuesField=JSONArray.class.getDeclaredField("values");
    valuesField.setAccessible(true);
    List<Object> values=(List<Object>)valuesField.get(JSONArrayObject);
    if(index >= values.size())
        return;
    values.remove(index);
}
1
ответ дан 28 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: