2012-12-20 11 views
8

こんにちはすべて私はJsonで一番良いとは言えません。私はループを介してjson配列にいくつかのjsonオブジェクトを追加しようとしていましたが、問題はループになるたびに新しいデータで配列内の以前のデータを乗り越えることです。ここに私のコードは次のとおりです。X.size = 2与えられたJSON add to JSONArray issue

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

例:

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}] 

私は私の例では、十分に明確であると思います。

誰でも私をここで助けることができたら感謝します。そうしないとあなたが何度も何度も何度も同じインスタンスを更新し、同じオブジェクトへの参照を追加している

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

:あなたは、ループの各反復で新しいjsonObj参照を作成する必要が

答えて

19

アレイ。それらはすべて同じ参照であるため、そのうちの1つへの変更は配列内のすべてに影響します。

+0

ありがとう、私の問題を解決しました。 – ComeRun

+0

これを回答としてお願いします;) – Ayyoub

+0

@ComeRun:これを回答としてマークして、人々が一目で分かるようにしてください。 – ofey