JSON数组未正确生成 - java

我已经编写了用于从文件生成搜索数据的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();

参考方案

您实际上是在创建一个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);

JSON PATH字段NULL检查表达式 - java

我有一个像bellow的json数组:{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sa…

Java Map,如何将UTF-8字符串正确放置到地图? - java

我有一个地图,LinkedHashMap更确切地说。我想在上面放一个字符串对象。然后,我读取此值以查看实际存储的内容。字符串本身具有非ASCII字符(西里尔文,韩文等)。将其放到地图上然后阅读后,这些字符将替换为??? s。一些代码:Map obj = new LinkedHashMap(); System.out.println("name: &…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…