2012-12-20 43 views
8

大家好,我不Json的最好的。我試圖通過一個循環來添加一些JSON對象成JSON數組,但問題是,每次涉及到循環,它也騎過由新數據數組中以前的數據。這裏是我的代碼:JSON添加到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); 
    } 
} 

例子給出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}] 

我希望我的例子是非常明顯的。

ID來感激,如果有人能幫助我在這裏。

回答

19

你需要創建一個新的jsonObj參考與循環的每次迭代:

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); 
} 

否則,你多次更新相同的實例一遍,並添加引用同一對象多次向陣列。由於它們都是相同的參考,因此對其中一個參數的更改會影響數組中的所有參數。

+0

感謝很多人,它解決了我的問題。 – ComeRun

+0

將此標記爲一個答案,請;) – Ayyoub

+0

@ComeRun:請記住這爲答案讓人們從一個一目瞭然知道它的工作。 – ofey