我使用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中,这是我想要避免的,因为这个文件可能相当大。
发布于 2015-09-08 18:37:58
对这样的文件进行就地编辑通常非常复杂;一种更简单的方法是创建一个新的临时文件,大多数情况下,只需复制正在编写的内容,直到达到修改新文件的条件为止。
最后,您可以删除原始文件,并将临时文件重命名为“替换”它;不过,除非磁盘空间有问题,否则我个人喜欢将原始源保留在附近(特别是在自动系统中)以进行故障排除。
https://stackoverflow.com/questions/32464859
复制相似问题