JAVA JSON保存文件

时间:2018-04-26 13:41:37

标签: java json

这是我第一次在这里问而不是阅读。 我正在开发一个将数据库复制到JSON文件的JAVA软件。 我的问题是我只获得了到达数据库的最后一行的副本。

Theres my CODE

public void getData() throws IOException {
    try {

        String query = "select * from Productos";
        rs = st.executeQuery(query);
        System.out.println("Prueba de funcionamiento");
        JSONObject jobj = new JSONObject();
        while(rs.next()) {
            String cdpt= rs.getString("Cod.RefPro");
            String name= rs.getString("Nombre");
            String desc = rs.getString("Descripcion");
            String prec = rs.getString("PrecioNeto");
            String pvp = rs.getString("pvp");
            String cdp = rs.getString("CodRefProv");
            String fam = rs.getString("Familia");
            String exis = rs.getString("Existencias");

            System.out.println(cdpt);


             JSONArray list = new JSONArray();
             JSONObject jobja = new JSONObject();
             JSONObject jobjb = new JSONObject();
             JSONObject jobjc = new JSONObject();
             JSONObject jobjd = new JSONObject();
             JSONObject jobje = new JSONObject();
             JSONObject jobjf = new JSONObject();
             JSONObject jobjg = new JSONObject();
             JSONObject jobjh = new JSONObject();


             jobja.put("crf", cdpt);
             jobjb.put("name", name);
             jobjc.put("desc", desc);
             jobjd.put("pve", prec);
             jobje.put("pvp", pvp);
             jobjf.put("cdp", cdp);
             jobjg.put("familia", fam);
             jobjh.put("existencias", exis);
             list.add(jobja);
             list.add(jobjb);
             list.add(jobjc);
             list.add(jobjd);
             list.add(jobje);
             list.add(jobjf);
             list.add(jobjg);
             list.add(jobjh);
             jobj.put("Productos", list);



        }


        // try-with-resources statement based on post comment below :)
        try (FileWriter file = new FileWriter("N:\\file.json")) {
            file.write(jobj.toJSONString());
            file.flush();
            System.out.println("Successfully Copied JSON Object to File...");
            System.out.println("\nJSON Object: " + jobj);
        }
    }catch(Exception ex) {
        System.out.println("Error: "+ex);
    }
}

}

如果有人帮助我解决这个问题,我将非常感激

3 个答案:

答案 0 :(得分:4)

Map延伸put

致电debug时, 一个元素被添加到地图中。

在你的情况下, 使用键" Productos"。

添加每个元素

每次你放一个新元素, 它会覆盖之前添加的元素,因为两者的密钥相同。

答案 1 :(得分:1)

每次循环运行时,您都会以Product键值覆盖列表。

所以只需替换

jobj.put("Productos", list);

  jobj.put("Productos"+i++, list);

并在循环外定义i。

替换之后

。你的代码就是这样的

public void getData() throws IOException {
        try {

                String query = "select * from Productos";
                rs = st.executeQuery(query);
                System.out.println("Prueba de funcionamiento");
                JSONObject jobj = new JSONObject();
                String cdpt="",name="",desc="",precm="",pvp="",cdp="",fam="",exis="";
                JSONArray list = new JSONArray();
                JSONObject[7] jobj=new JSONObject();
                int i=0;
                while(rs.next()) {
                        cdpt= rs.getString("Cod.RefPro");
                        name= rs.getString("Nombre");
                        desc = rs.getString("Descripcion");
                        prec = rs.getString("PrecioNeto");
                        pvp = rs.getString("pvp");
                        cdp = rs.getString("CodRefProv");
                        fam = rs.getString("Familia");
                        exis = rs.getString("Existencias");

                        // System.out.println(cdpt);

                        for (int i=0; i<=jobj.length; i++)
                                jopv[i]=new JSONObject();

                        jobj[0].put("crf", cdpt);
                        jobj[1].put("name", name);
                        jobj[2].put("desc", desc);
                        jobj[3].put("pve", prec);
                        jobj[4].put("pvp", pvp);
                        jobj[5].put("cdp", cdp);
                        jobj[6].put("familia", fam);
                        jobj[7].put("existencias", exis);

                        for(int i=0; i<=jobj.lenght; j++)
                                list.add(jobj[i]);

                        jobj.put("Productos"+i++, list);
                }


                // try-with-resources statement based on post comment below :)
                try (FileWriter file = new FileWriter("N:\\file.json")) {
                        file.write(jobj.toJSONString());
                        file.flush();
                        System.out.println("Successfully Copied JSON Object to File...");
                        System.out.println("\nJSON Object: " + jobj);
                }
        }catch(Exception ex) {
                System.out.println("Error: "+ex);
        }
}

希望这个有用。

答案 2 :(得分:0)

jobj是一张地图

jobj.put("Productos", list);

使用此行,您只使用键“Productos”将最后一个列表放入jobj。

我认为你需要一份jobj的清单