Java 如何使用org.json写入json
嘿,我正在尝试编写json文件,但我似乎无法解释为什么整个文件被覆盖并返回到第一步,这就是我正在使用的代码Java 如何使用org.json写入json,java,Java,嘿,我正在尝试编写json文件,但我似乎无法解释为什么整个文件被覆盖并返回到第一步,这就是我正在使用的代码 JSONObject j = new JSONObject(); j.put("name", member.getUser().getName()); JSONObject group = new JSONObject(); group.put(String.valueOf(Math.random
JSONObject j = new JSONObject();
j.put("name", member.getUser().getName());
JSONObject group = new JSONObject();
group.put(String.valueOf(Math.random()), j);
String fileName = "test.json";
try (FileWriter file = new FileWriter(fileName)) {
file.write(group.toString());
file.flush();
} catch (IOException e) {
e.fillInStackTrace();
}
我的JSON文件是这样写的
{"0.027601526266715193":{"name":"Keurig"}}
但是,如果我再次运行它,它不会添加另一个组。我希望它如何添加到它,它只是覆盖文件,这就是我希望它如何
{"0.027601526266715193":{"name":"Keurig"}, "0.02015264243212141":{"name":"Keurig"}}
您需要以下代码来解决问题:
JSONObject json;
String fileName= "test.json";
File f = new File(fileName);
JSONObject j = new JSONObject();
j.put("name", member.getUser().getName());
if (f.exists()){
InputStream is = new FileInputStream(fileName);
String jsonTxt;
try (Scanner scanner = new Scanner(is, StandardCharsets.UTF_8.name())) {
jsonTxt = scanner.useDelimiter("\\A").next();
}
json = new JSONObject(jsonTxt);
}else {
json = new JSONObject();
}
json.put(String.valueOf(Math.random()), j);
try (FileWriter file = new FileWriter(fileName)) {
file.write(json.toString());
file.flush();
} catch (IOException e) {
e.fillInStackTrace();
}
您正在创建并初始化一个新的“j”,然后将其添加到一个新的“组”,最后打印新的“组”对象。那么你在哪里读上一个对象?你在哪里添加新的“组”到它???阅读。字符输出流(File File,boolean append)@ScaryWombat-Java FileWriter“append”是我的第一个想法。但是OP将获得
{“0.123”:{“name”:“Keurig”}{“0.345”:{“name”:“Keurig”}
,这不是合法的JSON。他需要1)将原始JSON读入JSON对象,2)将新数据附加到该对象,最后3)编写新更新的对象(可能没有“附加”模式)。他肯定需要第三个JSON对象(除了“j”和“group”);大概是JSONArray。@Keurig:我想你的意思是,不是谢谢@MarsAtomic抱歉,我一定是浏览了文档中的那部分