我找到了一种方法,但奇怪的是,它比直接反序列化-添加-重新序列化方法慢两倍多,该方法有 500 个 POJO 的列表,每个 POJO 有三个字段,而且对象越多,它只会变得更糟。
ObjectMapper mapper = new ObjectMapper();
JsonParser parser = mapper.getJsonFactory().createJsonParser(input);
JsonGenerator gen = mapper.getJsonFactory().createJsonGenerator(output, JsonEncoding.UTF8);
gen.writeStartArray();
parser.nextToken();
while (parser.nextToken() == JsonToken.START_OBJECT) {
//gen.writeTree(parser.readValueAsTree());
//parser.skipChildren();
//EDIT: This is much faster as the only method in the loop:
gen.copyCurrentStructure(parser);
}
gen.writeTree(mapper.valueToTree(/*new Object to add*/);
gen.writeEndArray();
gen.close();
parser.close();
即使我没有将每个对象作为一棵树,而是将它们作为字段/值迭代地移动,它也会快一点,但仍然比替代方案慢得多。这是意料之中的,还是有更好的方法将其作为流数据处理,而不是批量 JSON-to-Java-to-JSON 方法?
编辑:啊哈!发现 JsonGenerator 可以直接从带有copyCurrentStructure(JsonParser)
. 在 while 循环中使用它会更快,现在比蛮力方法要快很多。