使用 Java 在 JSON 文件上多次写入
Writing multiple times on a JSON file with Java
我正在尝试使用 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();
}
我正在尝试使用 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();
}