gson 我如何在java中添加一个新的对象到我的json文件而不是覆盖它?

ttygqcqt  于 2022-12-13  发布在  Java
关注(0)|答案(1)|浏览(173)

我目前正在构建一个GSONFileWriter类。

public class GSONFileWriter {

private File jsonFile;

private final String json;

public GSONFileWriter(String json) {
    this.json = json;
}

public void generateJsonFileIfNotExists(String pathname) {
    try {
        jsonFile = new File(pathname);
        if (!jsonFile.exists()) {
            if (jsonFile.createNewFile()) {
                System.out.println("File successful created.");
            } else {
                System.out.println("Error: Building the file went wrong!");
                System.exit(1);
            }
        }
        fillJsonFile();
    } catch (Exception e) {
        System.err.println("Error: Building the file went wrong!");
    }
}

private void fillJsonFile() {
    try (PrintWriter writer = new PrintWriter(jsonFile, StandardCharsets.UTF_8)) {
        writer.append(json);
        writer.println();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}
在CLI类内部调用

Gson gson = new Gson();
            String json = gson.toJson(target);
            GSONFileWriter gsonFileWriter = new GSONFileWriter(json);
            gsonFileWriter.generateJsonFileIfNotExists("EmployeeData.json");

它创建并构建一个新的JSON文件,其中包含一个对象。

{"salary":34000.0,"name":"Hans","age":30,"id":"d40507a7-a802-4494-9a0c-5a97a0a4d0bf"}

然而问题是,每当我再次运行代码,旧文件被覆盖,并创建一个新的.我试图改变代码,使它添加一个新的对象到文件,而不是覆盖它.任何提示?

eni9jsuy

eni9jsuy1#

我建议:首先:以String形式读取json文件(如果存在)。

String file = "<File>";
 String json = new String(Files.readAllBytes(Paths.get(file)));

其次,使用JsonParser将此字符串转换为JsonObject:

JsonObject object = JsonParser.parseString(json).getAsJsonObject();

现在您已经获得了jsonObject树形式的json-file文件,并且可以根据需要对其进行操作。使用:

JsonObject.get(<MemberName>);
JsonObject.add(String <propertyName>, JsonElement <value>);
JsonObject.addProperty(String <propertyName>, Number/String/Boolean/Char <value>);

等等。
无论何时完成,您都可以通过OutputStream或任何您喜欢的方式将其写入json-file。

相关问题