Java 如何使用org.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

嘿,我正在尝试编写json文件,但我似乎无法解释为什么整个文件被覆盖并返回到第一步,这就是我正在使用的代码

            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抱歉,我一定是浏览了文档中的那部分