2012-12-20 30 views
8

Xin chào tất cả Tôi không phải là người giỏi nhất tại Json. Tôi đã cố gắng để thêm một số đối tượng json vào một mảng json thông qua một vòng lặp, nhưng vấn đề là mọi khi nói đến vòng lặp, nó cũng hơn cưỡi dữ liệu trước đó trong mảng bằng các dữ liệu mới. đây là mã của tôi:JSON thêm vào vấn đề JSONArray

JSONObject jsonObj = new JSONObject(); 
JSONArray jsonArray = new JSONArray(); 
if(X.size() > 0) 
{ 
    for (int j = 0; j < X.size(); j++) 
    { 
    zBean aBean = (zBean)X.get(j); 
    jsonObj.put(ID,newInteger(aBean.getId())); 
    jsonObj.put(NAME,aBean.getName()); 
    jsonArray.add(jsonObj); 
    } 
} 

ví dụ đưa ra X.size = 2:

when j=0 
jsonObj => {"Name":"name1","Id":1000} 
jsonArray => [{"Name":"name1","Id":1000}] 

when j = 1 
jsonObj => {"Name":"name2","Id":1001} 
jsonArray => [{"Name":"name2","Id":1001},{"Name":"name2","Id":1001}] 

Tôi hy vọng ví dụ của tôi là đủ rõ ràng.

Hãy biết ơn nếu có ai có thể giúp tôi ở đây.

Trả lời

19

Bạn cần phải tạo một jsonObj tham chiếu mới với mỗi lần lặp của vòng lặp:

for (int j = 0; j < X.size(); j++) 
{ 
    zBean aBean = (zBean)X.get(j); 
    jsonObj = new JSONObject(); 
//^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line 
    jsonObj.put(ID,newInteger(aBean.getId())); 
    jsonObj.put(NAME,aBean.getName()); 
    jsonArray.add(jsonObj); 
} 

Nếu không, bạn đang cập nhật ví dụ tương tự hơn và hơn nữa, và thêm một tham chiếu đến cùng một đối tượng nhiều lần đến mảng. Vì tất cả chúng đều là cùng một tham chiếu, một thay đổi đối với một trong số chúng ảnh hưởng đến tất cả chúng trong mảng.

+0

Cảm ơn rất nhiều người, nó đã giải quyết được vấn đề của tôi. – ComeRun

+0

Đánh dấu câu trả lời này là một câu trả lời); – Ayyoub

+0

@ComeRun: hãy đánh dấu câu trả lời này để mọi người biết trong nháy mắt rằng nó hoạt động. – ofey

Các vấn đề liên quan