使用JSONObject和ObjectMapper

时间:2017-07-12 20:31:34

标签: java json jackson

我使用java编辑包含JSON的文件:

public void editApi(String path, String nameOfOldApi, API updatedApi)
    throws IOException, ParseException
{
    String apiPath = path + "\\" + updatedApi.getTeamName() + "\\";
    Gson gson = new Gson();
    ObjectMapper mapper = new ObjectMapper();

    String updatedJsonString = gson.toJson(updatedApi);
    JSONObject jsonToBeEditted = mapper.readValue(new File(apiPath + nameOfOldApi + ".json"), JSONObject.class);
    JSONObject updatedJson = mapper.readValue(updatedJsonString, JSONObject.class);

    for (Object key : jsonToBeEditted.keySet()) {
        if (key.equals("tags") || key.equals("paths")) {
            continue;
        } else if (!jsonToBeEditted.get(key).equals(updatedJson.get(key))) {
            System.out.println(jsonToBeEditted.get(key) + "--->" + updatedJson.get(key));
            jsonToBeEditted.put(key, updatedJson.get(key));
        }
    }

    mapper.writeValue(new File(apiPath + updatedApi.getInfo().getTitle() + ".json"), jsonToBeEditted);

    if (!updatedApi.getInfo().getTitle().equals(nameOfOldApi)) {
        Files.delete(new File(apiPath + nameOfOldApi + ".json").toPath());
    }
}

当我运行程序(这是一个弹簧应用程序,如果它是相关的)并打电话给它时,它第一次正常工作。但是,如果我再次尝试编辑同一个文件,我会收到一个FileSystemException,说该文件正由另一个进程使用。例如,如果我有一个文件'test.json'并且我将其编辑为'test edit.json',它会正确添加新文件并删除旧文件。但是,如果我然后将'test edit.json'编辑为'test edit again.json',则会抛出此错误:

java.nio.file.FileSystemException: C:\stackoverflow.json: The process cannot access
the file because it is being used by another process.

我迷失了它发生的地方......我觉得在ObjectMapper.writeValue()电话中某些事情没有被正确关闭,但我不确定。

0 个答案:

没有答案