我正在使用Jackson流式api读取json文件,如下所示:
// Go through json model and grab needed resources.
JsonFactory jsonfactory = new JsonFactory();
JsonParser jp = jsonfactory.createParser(fis);
JsonToken current;
current = jp.nextToken();
ObjectMapper mapper = new ObjectMapper();
if (current != JsonToken.START_OBJECT) {
System.out.println("Error: root should be object: quiting.");
return null;
}
while (jp.nextToken() != JsonToken.END_OBJECT) {
String fieldName = jp.getCurrentName();
// move from field name to field value
if ("Field1".equals(fieldName)) {
jp.nextToken();
JsonNode json = mapper.readTree(jp);
//Manipulate JsonNode
/*Want to write back into json file in place of
old object with manipulated node*/
}
else {
jp.skipChildren();
}
}
从上面的代码我基本上解析json文件,直到找到我想要的所需字段,然后我将其读入JsonNode对象,然后我通过该JsonNode对象并操作与之关联的一些数据。我的问题是有没有办法从json文件中删除该节点,并将新创建的POJO写入具有相同字段名称的文件而不是旧文件名?我在网上找到的关于它的所有内容都涉及将整个json文件读入JsonNode,我想避免使用它,因为这个文件可能非常大。
答案 0 :(得分:1)
这样的文件的就地编辑通常非常复杂;一个更简单的方法是创建一个新的临时文件,并且大部分只是复制你正在编写的内容,直到你达到修改新内容的条件为止。
然后在最后你可以删除原始文件并重命名临时文件以“替换”它;除非磁盘空间是个问题,否则我个人喜欢保留原始资源(特别是在自动化系统中)以进行故障排除