java - 使用 Java 在 JSON 文件上多次写入

标签 java json file json-simple

我尝试使用 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", "andrea@mail.com");
        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":"andrea@gmail.com","Nome":"Andrea"}]}

  • 第二次运行时,它也会在列表中添加另一个字段,同时保留第一个字段。 结果:

Dati: {"Clienti":[{"Email":"andrea@gmail.com","Nome":"Andrea"},{"Email":"andrea@gmail.com","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/

相关文章:

javascript - Typeahead.js - 预取动态 php 生成的 JSON

javascript - 将一行文本转换成json格式

file - 为什么使用 mmap 而不是 fread?

java - 如何通过单击单元格表中的单元格来打开弹出面板?

java - 使用系统属性中的静态最终字段进行单元测试

java - 快速查找数组中元素的数量

mysql - 执行 120mb 的插入语句

java - Spring 批处理-Kafka : KafkaItemReader reads the data ALWAYS from beginning

json - 在服务器上找不到 Wordpress wp-json -- localhost

file - Lisp if 语句 - emacs 初始化文件 ".emacs"