2012-01-05 26 views
5

Mi JSONArray escómo quitar elemento JSONArray utilizando Java

[{ 
"Id": null, 
"Name": "One New task", 
"StartDate": "2010-02-03T05:30:00", 
"EndDate": "2010-02-04T05:30:00", 
"Duration": 1, 
"DurationUnit": "d", 
"PercentDone": 0, 
"ManuallyScheduled": false, 
"Priority": 1, 
"parentId": 8, 
"index": 0, 
"depth": 3, 
"checked": null },{ 
"Id": null, 
"Name": "New task", 
"StartDate": "2010-02-04T05:30:00", 
"EndDate": "2010-02-04T05:30:00", 
"Duration": 0, 
"DurationUnit": "d", 
"PercentDone": 0, 
"ManuallyScheduled": false, 
"Priority": 1, 
"parentId": 8, 
"index": 1, 
"depth": 3, 
"checked": null }] 

Ahora de esta JSONArray Quiero eliminar Id, ManuallyScheduled, comprobado,

He intentado utilizar jsonArray.remove(1) y también jsonArray.discard("Id") en JAVA. pero no pasa nada. ¿Qué estoy haciendo mal para eliminar elementos de la matriz?

Estoy utilizando JAVA como mi tecnología.

Respuesta

9

Lo que tienes allí es una matriz de objetos. Por lo tanto, deberá recorrer el conjunto y eliminar los datos necesarios del cada objeto, p.

for (int i = 0, len = jsonArr.length(); i < len; i++) { 
    JSONObject obj = jsonArr.getJSONObject(i); 
    // Do your removals 
    obj.remove("id"); 
    // etc. 
} 

he asumido que está utilizando org.json.JSONObject y org.json.JSONArray aquí, pero el principal sigue siendo el mismo cualquiera que sea la biblioteca de procesamiento de JSON que está utilizando.

Si desea convertir algo así como [{"id":215},{"id":216}] a [215,216] se podía así que algo como:

JSONArray intArr = new JSONArray(); 
for (int i = 0, len = objArr.length(); i < len; i++) { 
    intArr.put(objArr.getJSONObject(i).getInt("id")); 
} 
+0

sí .. gracias por su orientación. Puedo hacer mi tarea – yaryan997

+0

Me alegra oír eso :-) Siempre puedes extender 'JSONArray' y agregar un método' removeData (String ... keys) 'o algo similar si esto es algo que querías hacer regularmente. – jabclab

+0

una pregunta más para ti ... ¿Cómo puedo pasar el valor a JSONArray en Java? como si tuviera jsonArray of form ** [{"id": 215}, {"id": 216}] ** pero quiero convertir mi jsonArray a ** [215,216] ** ¿hay alguna manera de hacerlo? ?? Cómo puedo conseguir esto. – yaryan997

2

Esto es útil a veces en Android cuando se quiere utilizar la estructura JSON directamente.

Observe que solo uso esto cuando manejo JSONObject dentro de la matriz.

public static JSONArray remove(final int idx, final JSONArray from) { 
    final List<JSONObject> objs = asList(from); 
    objs.remove(idx); 

    final JSONArray ja = new JSONArray(); 
    for (final JSONObject obj : objs) { 
     ja.put(obj); 
    } 

    return ja; 
} 

public static List<JSONObject> asList(final JSONArray ja) { 
    final int len = ja.length(); 
    final ArrayList<JSONObject> result = new ArrayList<JSONObject>(len); 
    for (int i = 0; i < len; i++) { 
     final JSONObject obj = ja.optJSONObject(i); 
     if (obj != null) { 
      result.add(obj); 
     } 
    } 
    return result; 
} 
+1

¿Por qué agregar a una lista <> y no agregar directamente a un nuevo JSONArray? – epeleg

+0

sí, puedes hacer eso. Tengo la versión no optimizada porque ya tenía el método como lista por conveniencia. –

1

El siguiente método se encuentra el objeto en un array con el id a juego, a continuación, devolver la matriz filtrada.

public JSONArray removeObject(JSONArray array, String id) throws JSONException { 
    for (int i = 0; i < array.length(); i++) { 
     JSONObject obj = array.getJSONObject(i); 
     if (obj.getString("ID").equals(id)) { 
      array.remove(i); 
      // Toast.makeText(this, "ENCONTRADO", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    return array; 
} 
Cuestiones relacionadas