Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson覆盖JsonNode_Java_Json_Jackson - Fatal编程技术网

Java 使用Jackson覆盖JsonNode

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;

我使用Jackson streaming 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写入该文件,以代替旧的POJO?我能在网上找到的所有关于它的东西都涉及到将整个json文件读入一个JsonNode,我希望避免这种情况,因为这个文件可能相当大。

像这样的文件的就地编辑通常相当复杂;一种更简单的方法是创建一个新的临时文件,在大多数情况下,只需复制您正在编写的内容,直到达到修改新文件的条件


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

这是一个很好的建议,我甚至没有想到只创建我正在读取的文件的精确副本。对于我的问题,这似乎是一个简单易行的解决方案。谢谢!