Json数组未正确生成

时间:2012-03-21 20:38:57

标签: java json

我编写了用于从file生成搜索到的数据的json的java代码。但是它没有生成精确的JsonArray。就像

[{"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();

3 个答案:

答案 0 :(得分: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'这样的字符串不会被视为八进制值并转换为错误的值(至少这是在javascript中为true :))

Integer.parseInt(productID, 10);

答案 1 :(得分:3)

您必须在循环中重新实例化JSonObject,因为在修改它时,您需要修改数组引用多次的底层对象。将你的JSONObject jo = new JSONObject();移到循环中,它应该可以正常工作。

答案 2 :(得分:2)

JSONObject jo = new JSONObject();放在循环中:

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

}