2012-03-21 52 views
2

我已經編寫了用於從file.j文件生成json搜索數據的java代碼,但它沒有生成確切的JsonArray。它像Json數組生成不正確

[{"item":"1617"},{"item":"1617"}]

,而不是

[{"item":"747"},{"item":"1617"}].

這裏1617是從文件中取得最後一個項目。

JSONArray ja = new JSONArray(); 
JSONObject jo = new JSONObject(); 

while (products.readRecord()) 
{ 
    String productID = products.get("user"); 
    int j = Integer.parseInt(productID); 
    if(j == userId) { 
     itemid = products.get("item"); 
     jo.put("item",itemid); 
     ja.add(jo); 
    } 
} 

out.println(ja); 
products.close(); 
+0

你嘗試過調試..? – jabal 2012-03-21 20:44:30

回答

6

實際上,您正在創建一個jSONobject對象來處理兩個對象,您不應該需要在while循環中創建JSONObjects嗎?這樣的事情,所以在while循環每次迭代將創建一個新的JSONObject並把它添加到JSONArray

JSONArray ja = new JSONArray(); 

while (products.readRecord()) 
{ 
    String productID = products.get("user"); 
    int j = Integer.parseInt(productID, 10); 

    if(j == userId) 
    { 
     JSONObject jo = new JSONObject(); 
     itemid = products.get("item"); 
     jo.put("item", itemid); 
     ja.add(jo); 
    } 

} 

out.println(ja); 
products.close(); 

附加:

我不知道如何Java並轉換爲字符串的整數,但我認爲使用parseInt函數時,你應該總是指定基數所以像「09」的字符串將不會被視爲八進制值,並轉換爲錯誤值(這ATLEAST是真的在JavaScript :))

Integer.parseInt(productID, 10);

+2

+1。更好的是,將實例化移動到if塊,避免實例化不必要的對象 – 2012-03-21 20:45:53

+0

優化感謝的好主意,+1的評論:) – 2012-03-21 20:49:28

+0

謝謝Saket Patel – 2012-03-21 20:55:12

3

您必須在循環內重新實例化您的JSonObject,因爲當您修改它時,您將修改數組引用的基礎對象。將你的JSONObject jo = new JSONObject();移到循環中,它應該可以正常工作。

+0

感謝Guillaume Polet – 2012-03-21 20:56:44

2

JSONObject jo = new JSONObject();內循環:

while (products.readRecord()) 
{ 
    JSONObject jo = new JSONObject(); 
    String productID = products.get("user"); 
    int j = Integer.parseInt(productID); 
    // etc 

}

+0

謝謝賈巴爾... – 2012-03-21 20:57:13