2012-03-21 54 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