2011-11-18 2 views
0

나는 다음과 같은 코드에서 반복에 문제가 직면하고있다, 나는 그것의 양식 목록을 전달 오전, 나는 무엇이 잘못되고 있는지 모르겠다, 나는 출력을 필요로하지만 나는 마지막 form_id 만 받고있다. 나는이 출력을 얻기 위해이 코드를 가지고있다. 폼의 목록을 전달하고 출력으로 json을 얻는다. 제 잘못이 어디 있는지 알려주세요.문제가 루프에

출력 :

{ 
    "forms": [ 
     { "form_id": "1", "form_name": "test1" }, 
     { "form_id": "2", "form_name": "test2" } 
    ] 
} 

코드 :

public class MyFormToJSONConverter { 

    public JSONObject getJsonFromMyFormObject(List<Form> form) { 

     JSONObject responseDetailsJson = new JSONObject(); 
     JSONArray jsonArray = null; 
     List<JSONArray> list = new ArrayList<JSONArray>(); 
     System.out.println(form.size()); 
     for (int i = 0; i < form.size(); i++) { 
       JSONObject formDetailsJson = new JSONObject(); 
       formDetailsJson.put("form_id", form.get(i).getId()); 
       formDetailsJson.put("form_name", form.get(i).getName()); 
       formDetailsJson.put("desc", 
            form.get(i).getFormDescription()); 
       jsonArray = new JSONArray(); 
       jsonArray.add(formDetailsJson); 
       list.add(jsonArray); 
     } 

     for (JSONArray json : list) { 
       responseDetailsJson.put("form", json); 
     } 

     return responseDetailsJson; 
    } 
+0

당신이 얻고있는 오류는 무엇입니까 – Manoj

+0

디버거에서 예상했던대로 동작하는지 확인 했습니까? –

+0

목록에서 단일 양식을 얻고 있습니다. 루프에 문제가 있습니다. – sarah

답변

2

귀하의 문제가 여기에 있습니다 :

for (JSONArray json : list) { 
    responseDetailsJson.put("form", json); 
} 

다음 값으로 이전 값을 모두 덮어 쓰게됩니다 (A 단일 JSON 객체). 당신은 당신은 아마이 제거해야

responseDetailsJson.put("form", list); 

원하는 :

jsonArray = new JSONArray(); 
jsonArray.add(formDetailsJson); 
list.add(jsonArray); 

당신을 줄 것이다 : 모든 말했다

{ 
    "forms": [ 
     [{ "form_id": "1", "form_name": "test1" }], 
     [{ "form_id": "2", "form_name": "test2" }] 
    ] 
} 

, 나는 당신이 원하는 생각을 :

JSONObject responseDetailsJson = new JSONObject(); 
List<JSONObject> list = new ArrayList<JSONObject>(); 
System.out.println(form.size()); 
// List.get will be very inefficient if passed a LinkedList 
// instead of an ArrayList. 
for (Form formInstance:form) { 
     JSONObject formDetailsJson = new JSONObject(); 
     formDetailsJson.put("form_id", formInstance.getId()); 
     formDetailsJson.put("form_name", formInstance.getName()); 
     formDetailsJson.put("desc", 
          formInstance.getFormDescription()); 
     list.add(formDetailsJson); 
} 

responseDetailsJson.put("form", list); 
+0

결과는 양식 목록에 있습니까? – sarah

+0

이제 여기에 list.add (jsonArray)와 관련된 문제가 있습니다. 해당 추가 addall은 – sarah

+0

@ sarah를 추가하지 않습니다. 죄송합니다. 거기에 몇 개의 추가 라인이 있습니다. – cwallenpoole

0

JSON 개체는 기본적으로 키/값입니다. 쌍. 코드에서 다음을 수행합니다.

for (JSONArray json : list) 
{ 
    responseDetailsJson.put("form", json); 
} 

매번 같은 키를 덮어 쓰는 중입니다.

+0

나는 이것을 해결하는 방법을 모르고 있습니다. – sarah