2012-01-05 5 views
5

My JsonArray являетсяКак удалить JSONArray элемент с помощью 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 }] 

Теперь из этого JsonArray Я хочу, чтобы удалить Id, ManuallyScheduled, проверил,

Я попытался с помощью jsonArray.remove(1) и в JAVA также jsonArray.discard("Id"). , но ничего не происходит. что я делаю неправильно, чтобы удалить элементы массива?

Я использую JAVA как свою технологию.

ответ

9

У вас есть массив объектов. Поэтому вам придется пройти через массив и удалить необходимые данные из каждого объекта, например.

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

я предполагал, что вы используете org.json.JSONObject и org.json.JSONArray здесь, но главное остается неизменным независимо библиотека для обработки JSON вы используете.

Если вы хотите, чтобы преобразовать что-то вроде [{"id":215},{"id":216}] к [215,216] вы могли так что-то вроде:

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

да .. руководство пользователя. Я могу выполнить свою задачу. – yaryan997

+0

Рад это услышать :-) Вы всегда можете расширить 'JSONArray' и добавить' removeData (String ... keys) 'или что-то подобное, если это было то, что вы хотели делать регулярно. – jabclab

+0

еще один вопрос к вам. Как я могу просто передать значение JSONArray в java. например, у меня есть jsonArray формы ** [{"id": 215}, {"id": 216}] **, но я хочу преобразовать свой jsonArray в ** [215,216] **, есть ли способ сделать это ?? как я могу это достичь. – yaryan997

2

Это полезно иногда андроида, когда вы хотите использовать структуру JSON непосредственно.

Обратите внимание, что я использую это только при обработке JSONObject внутри массива.

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

Зачем добавлять в список <>, а не напрямую добавлять в новый JSONArray? – epeleg

+0

да, вы можете это сделать. У меня есть неоптимизированная версия, потому что у меня уже был метод asList для удобства. –

1

Следующий метод будет найти объект в array с совпадающим id, а затем возвращают отфильтрованный массив.

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; 
} 
Смежные вопросы