2011-11-18 96 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); 
} 

將覆蓋所有先前值與未來值(單個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