我尝试使用 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/