我正在尝试使用JSON-Simple和Java在JSON文件上多次写入,但是第二次运行后出现一些问题。我是JSON的新手,所以这只是学习它的一种方法,下面是代码:

public class Writer{
    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws IOException {
        JSONParser parser = new JSONParser();
        JSONObject outer = new JSONObject();
        JSONObject inner = new JSONObject();
        JSONObject data = new JSONObject();
        ArrayList<JSONObject> arr = new ArrayList<JSONObject>();
        inner.put("Name", "Andrea");
        inner.put("Email", "[email protected]");
        arr.add(inner);
        outer.put("Clienti", arr);
        System.out.println("Dati: " + outer);
        File file = new File("temp.json");
        if(file.exists()) {
                PrintWriter write = new PrintWriter(new FileWriter(file));
                Iterator<JSONObject> iterator = arr.iterator();
                while(iterator.hasNext()) {
                        JSONObject it = iterator.next();
                        data = (JSONObject) it;
                    }
                arr.add(data);
                outer.put("Clienti", arr);
                System.out.println("Dati: " + outer);
                write.write(outer.toString());
                write.flush();
                write.close();
            } else {
                PrintWriter write = new PrintWriter(new FileWriter(file));
                write.write(outer.toString());
                write.flush();
                write.close();
            }
        }
    }


因此,我只想尝试添加相同的内容而不会丢失之前添加的内容,但是在运行时:


第一次运行顺利,它将正常打印在文件上。
结果:



Dati:{“ Clienti”:[{“ Email”:“ [email protected]”,“ Nome”:“ Andrea”}]}



第二次运行时,它将在列表内添加另一个字段,也保留了第一个字段。
结果:



达蒂:
{“ Clienti”:[{“ Email”:“ [email protected]”,“ Nome”:“ Andrea”},{“ Email”:“ [email protected]”,“ Nome”:“ Andrea”}] }



从第三次运行开始,它不再上传文件,而不是向现有的2添加另一个字段,它只是打印第二个结果。


我尝试了许多选项,但仍然不明白如何添加第三个字段而不丢失前两个字段,我该如何解决呢?

最佳答案

解决了将它放在if子句上的问题:

if(file.exists()) {
            Object obj = parser.parse(new FileReader("temp.json"));
            JSONObject jsonObject = (JSONObject) obj;
            JSONArray array = (JSONArray) jsonObject.get("Clienti");
            PrintWriter write = new PrintWriter(new FileWriter(file));
            Iterator<JSONObject> iterator = array.iterator();
            while(iterator.hasNext()) {
                JSONObject it = iterator.next();
                data = (JSONObject) it;
                System.out.println("Data" + data);
                arr.add(data);
                }
            arr.add(inner);
            System.out.println(arr);
            outer.put("Clienti", arr);
            System.out.println("Dati: " + outer);
            write.write(outer.toString());
            write.flush();
            write.close();
    }

关于java - 使用Java在JSON文件上多次写入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59789419/

10-08 21:53