2012-12-20 17 views
8

Cześć wszystkim Nie jestem najlepszy w Json. Próbowałem dodać jakiś obiekt json do tablicy json przez pętlę, ale problem jest za każdym razem, gdy dojdzie do pętli, to także ponad jazdą poprzednich danych w tablicy przez nowe dane. tutaj jest mój kod:JSON dodaj do JSONArray numer

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

przykład podano 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}] 

Mam nadzieję, że mój przykład jest wystarczająco jasne.

Jestem wdzięczny, jeśli ktoś może mi w tym pomóc.

Odpowiedz

19

Trzeba utworzyć nowy jsonObj odniesienia z każdej iteracji pętli:

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

przeciwnym razie jesteś w kółko aktualizującego samej instancji ponownie i dodanie odniesienia do tego samego obiektu wiele razy do szyk. Ponieważ wszystkie są tymi samymi odnośnikami, zmiana jednego z nich wpływa na wszystkie z nich w tablicy.

+0

Wielkie dzięki, rozwiązał mój problem. – ComeRun

+0

Oznacz to jako odpowiedź proszę;) – Ayyoub

+0

@ComeRun: zaznacz to jako odpowiedź, aby ludzie wiedzieli od razu, że zadziałało. – ofey

Powiązane problemy