2012-01-05 40 views
5

My JsonArray làLàm thế nào để loại bỏ yếu tố JSONArray sử dụng 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 }] 

Bây giờ từ JsonArray này tôi muốn loại bỏ Id, ManuallyScheduled, kiểm tra,

tôi đã cố gắng sử dụng jsonArray.remove(1) và cũng jsonArray.discard("Id") trong JAVA. nhưng không có gì xảy ra. Tôi đang làm gì sai để xóa các mục mảng?

Tôi đang sử dụng JAVA làm công nghệ của mình.

Trả lời

9

Những gì bạn có ở đó là một mảng đối tượng. Do đó, bạn sẽ phải lặp qua mảng và xóa dữ liệu cần thiết khỏi mỗi đối tượng, ví dụ:

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

tôi đã giả định bạn đang sử dụng org.json.JSONObjectorg.json.JSONArray ở đây, nhưng hiệu trưởng vẫn giữ nguyên bất cứ thư viện xử lý JSON bạn đang sử dụng.

Nếu bạn muốn chuyển đổi một cái gì đó giống như [{"id":215},{"id":216}]-[215,216] bạn có thể để một cái gì đó như:

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

có .. cảm ơn sự hướng dẫn của bạn. Tôi có thể làm nhiệm vụ của mình – yaryan997

+0

Rất vui khi nghe :-) Bạn luôn có thể mở rộng 'JSONArray' và thêm phương thức' removeData (String ... keys) 'hoặc tương tự nếu đây là điều bạn muốn làm thường xuyên. – jabclab

+0

một câu hỏi nữa cho bạn .. Làm thế nào tôi có thể chuyển giá trị cho JSONArray trong java. giống như tôi đang có jsonArray dạng ** [{"id": 215}, {"id": 216}] ** nhưng tôi muốn chuyển đổi jsonArray thành ** [215,216] ** là có cách nào để làm như vậy ?? Làm thế nào tôi có thể đạt được điều này. – yaryan997

2

này rất hữu ích đôi khi trong android khi bạn muốn sử dụng cấu trúc json trực tiếp.

Lưu ý rằng tôi chỉ sử dụng điều này khi tôi đang xử lý JSONObject bên trong mảng.

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

Tại sao thêm vào danh sách <> và không trực tiếp thêm vào một JSONArray mới? – epeleg

+0

có, bạn có thể làm điều đó. Tôi có phiên bản chưa được tối ưu hóa vì tôi đã có phương thức asList để thuận tiện. –

1

Các phương pháp sau đây sẽ tìm thấy các đối tượng trong một array với phù hợp với id, sau đó trở về mảng lọc.

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; 
} 
Các vấn đề liên quan