Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未正确生成Json数组_Java_Json - Fatal编程技术网

Java 未正确生成Json数组

Java 未正确生成Json数组,java,json,Java,Json,我已经编写了java代码,用于从文件中生成搜索数据的json,但它并没有生成精确的JsonArray。就像 [{“项目”:“1617”},{“项目”:“1617”}] 而不是 [{“项目”:“747”},{“项目”:“1617”}]。 这里1617是从文件中提取的最后一项 JSONArray ja = new JSONArray(); JSONObject jo = new JSONObject(); while (products.readRecord()) { String pro

我已经编写了java代码,用于从文件中生成搜索数据的json,但它并没有生成精确的JsonArray。就像

[{“项目”:“1617”},{“项目”:“1617”}]

而不是

[{“项目”:“747”},{“项目”:“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();

必须在循环中重新实例化JSonObject,因为修改它时,会修改数组多次引用的基础对象。移动
JSONObject jo=newjsonobject()在循环中,它应该可以正常工作。

您实际上是在创建一个jSONobject对象来处理两个对象,您不需要在while循环中创建jSONobject吗?类似这样,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中是这样的:)


Integer.parseInt(productID,10)

Place
JSONObject jo=newjsonobject()循环内部:

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

}

+1。更好的是,将实例化移动到if块,避免实例化不必要的对象