[英]Jackson doesn't append new JSON object to exisiting Json file
我正在尝试构建一个 Springboot 应用程序,该应用程序允许从 Postman 插入 Json object 并将其保存到现有的 Z466DEEC76ECDF24DFA56Z3 数据文件中。 我是 Jackson 的新手,所以也许我错过了什么?
这就是我的 json 文件的外观:
[
{
"Name":"After Dark",
"Author":"Haruki Murakami"
},
{
"Name":"It",
"Author":"Stephen King"
}
]
这是我尝试过的:
@PostMapping("/insertBook")
public void insertBook(@RequestBody Book book) {
File booksJsonFile = Paths.get(this.getClass().getResource("/books.json").toURI()).toFile();
objectMapper.writeValue(booksJsonFile, book);
}
它插入到一个空文件,但它不是 append 到现有的 json 文件。
我也试过这个:
@PostMapping("/insertBook")
public void insertBook(@RequestBody Book book) throws URISyntaxException {
try {
File file = Paths.get(this.getClass().getResource("/books.json").toURI()).toFile();
FileWriter fileWriter = new FileWriter(file, true);
SequenceWriter seqWriter = objectMapper.writer().writeValuesAsArray(fileWriter);
seqWriter.write(book);
seqWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我是否需要使用其他东西来达到我想要的结果? 我会感谢你的帮助。
我试图根据您的代码重现您的问题,我得出以下结论:
您不能直接修改resources
下的文件。 这是解释为什么。
我设法将 append 新JSON
到文件中(使用您的方法,但在本地保存文件),但这可能不是您所期望的(json结构已损坏):
[
{
"Name":"After Dark",
"Author":"Haruki Murakami"
},
{
"Name":"It",
"Author":"Stephen King"
}
][{"Name":"new name","Author":"new author"}]
恐怕无法直接在文件中更新当前的 JSON 结构。
synchronized
关键字以避免同时修改文件。public synchronized void updateJsonFile(Book book) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Path path = Paths.get("./books.json");
final String currentJsonArrayAsString = Files.readString(path);
try (FileWriter fileWriter = new FileWriter(path.toFile(), false)) {
JSONObject jsonObject = new JSONObject(objectMapper.writeValueAsString(book));
JSONArray jsonArray = new JSONArray(currentJsonArrayAsString);
jsonArray.put(jsonObject);
fileWriter.write(jsonArray.toString());
}
}
现在books.json
有以下内容:
[
{
"Author":"Haruki Murakami",
"Name":"After Dark"
},
{
"Author":"Stephen King",
"Name":"It"
},
{
"Author":"new author",
"Name":"new name"
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.