我编写了用于从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();
答案 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
}