¿Cómo elimino un elemento específico de un JSONArray?

Estoy construyendo una aplicación en la que solicito un archivo PHP del servidor. Este archivo PHP devuelve un JSONArray que tiene JSONObjects como sus elementos, por ejemplo,

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

mi código:

 /* 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(); } } 

¿Cómo elimino un elemento específico de este JSONArray?

Prueba este código

 ArrayList list = new ArrayList(); JSONArray jsonArray = (JSONArray)jsonObject; int len = jsonArray.length(); if (jsonArray != null) { for (int i=0;i 

Editar: Usando ArrayList agregará "\" a la clave y los valores. Entonces, usa JSONArray sí mismo

 JSONArray list = new JSONArray(); JSONArray jsonArray = new JSONArray(jsonstring); int len = jsonArray.length(); if (jsonArray != null) { for (int i=0;i 

En caso de que alguien regrese con la misma pregunta para la plataforma Android, no puede usar el método incorporado remove() si tiene como objective Android API-18 o menos. El método remove() se agrega en el nivel 19 de la API. Por lo tanto, lo mejor que se puede hacer es extender el JSONArray para crear una anulación compatible para el método remove() .

 public class MJSONArray extends JSONArray { @Override public Object remove(int index) { JSONArray output = new JSONArray(); int len = this.length(); for (int i = 0; i < len; i++) { if (i != index) { try { output.put(this.get(i)); } catch (JSONException e) { throw new RuntimeException(e); } } } return output; //return this; If you need the input array in case of a failed attempt to remove an item. } } 

EDITAR Como señaló Daniel, manejar un error silenciosamente es un mal estilo. Código mejorado.

 public static JSONArray RemoveJSONArray( JSONArray jarray,int pos) { JSONArray Njarray=new JSONArray(); try{ for(int i=0;i 
  JSONArray jArray = new JSONArray(); jArray.remove(position); // For remove JSONArrayElement 

Nota: – Si remove() no está en JSONArray entonces …

API 19 de Android (4.4) realmente permite este método.

La llamada requiere API nivel 19 (el mínimo actual es 16): org.json.JSONArray # remove

Haga clic derecho en Proyecto Ir a Propiedades

Seleccione Android desde la opción de sitio izquierdo

Y seleccione Project Build Target mayor que API 19

Espero que te ayude

Supongo que estás usando la versión Me, sugiero agregar este bloque de función manualmente, en tu código (JSONArray.java):

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

En la versión java usan ArrayList, en ME Version usan Vector.

En mi caso, quise eliminar jsonobject con el estado como valor distinto de cero, por lo que lo que hice fue una función “removeJsonObject” que toma el json antiguo y da el json requerido y llama a esa función dentro del constuctor.

 public CommonAdapter(Context context, JSONObject json, String type) { this.context=context; this.json= removeJsonObject(json); this.type=type; Log.d("CA:", "type:"+type); } public JSONObject removeJsonObject(JSONObject jo){ JSONArray ja= null; JSONArray jsonArray= new JSONArray(); JSONObject jsonObject1=new JSONObject(); try { ja = jo.getJSONArray("data"); } catch (JSONException e) { e.printStackTrace(); } for(int i=0; i 

Puedes usar la reflexión

Un sitio web chino proporciona una solución relevante: http://blog.csdn.net/peihang1354092549/article/details/41957369
Si no entiende chino, intente leerlo con el software de traducción.

Él proporciona este código para la versión anterior:

 public void JSONArray_remove(int index, JSONArray JSONArrayObject) throws Exception{ if(index < 0) return; Field valuesField=JSONArray.class.getDeclaredField("values"); valuesField.setAccessible(true); List values=(List)valuesField.get(JSONArrayObject); if(index >= values.size()) return; values.remove(index); }