使用Jackson覆盖JsonNode

时间:2015-09-08 18:31:39

标签: java json jackson

我正在使用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,我想避免使用它,因为这个文件可能非常大。

1 个答案:

答案 0 :(得分:1)

这样的文件的就地编辑通常非常复杂;一个更简单的方法是创建一个新的临时文件,并且大部分只是复制你正在编写的内容,直到你达到修改新内容的条件为止。

然后在最后你可以删除原始文件并重命名临时文件以“替换”它;除非磁盘空间是个问题,否则我个人喜欢保留原始资源(特别是在自动化系统中)以进行故障排除