Java 使用Jackson覆盖JsonNode
我使用Jackson streaming api读取json文件,如下所示:Java 使用Jackson覆盖JsonNode,java,json,jackson,Java,Json,Jackson,我使用Jackson streaming api读取json文件,如下所示: // Go through json model and grab needed resources. JsonFactory jsonfactory = new JsonFactory(); JsonParser jp = jsonfactory.createParser(fis); JsonToken current;
// 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写入该文件,以代替旧的POJO?我能在网上找到的所有关于它的东西都涉及到将整个json文件读入一个JsonNode,我希望避免这种情况,因为这个文件可能相当大。像这样的文件的就地编辑通常相当复杂;一种更简单的方法是创建一个新的临时文件,在大多数情况下,只需复制您正在编写的内容,直到达到修改新文件的条件
最后,你可以删除原始文件,并将临时文件重命名为“替换”它;除非磁盘空间是个问题,否则我个人喜欢保留原始源代码(特别是在自动化系统中)以进行故障排除这是一个很好的建议,我甚至没有想到只创建我正在读取的文件的精确副本。对于我的问题,这似乎是一个简单易行的解决方案。谢谢!