使用 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 是个问题,否则我个人喜欢保留原始来源(尤其是在自动化系统中)以进行故障排除
我正在使用 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 是个问题,否则我个人喜欢保留原始来源(尤其是在自动化系统中)以进行故障排除