使用 Jackson 覆盖 JsonNode

Overwrite JsonNode using 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,我想避免这种情况,因为这个文件可能非常大。

就地编辑这样的文件通常非常复杂;一种更简单的方法是创建一个新的临时文件,并且大部分情况下只需复制您正在编写的内容,直到您满足条件修改新文件的内容。

那么最后你可以删除原来的文件,把临时文件重命名为"replace";除非磁盘 space 是个问题,否则我个人喜欢保留原始来源(尤其是在自动化系统中)以进行故障排除