我想实现类似于CSV流处理的内容:
//read input file
.split(body().tokenize("\n", 100, false)).streaming()
.unmarshal(new BindyCsvDataFormat( ...
我可以控制输入文件的内容,例如,我可以对没有每个对象后开始JSON阵列和逗号新线的每个JSON对象:
{"id": "foo1"}
{"id": "foo2"}
...
然后按照相同的流程以CSV(分割和流),但使用ListJacksonDataFormat
或.json(JsonLibrary.Jackson)
我不能解组
这个怎么做?还是有读大JSON阵列另一种方式?
注:该处理要快,从而解释here我不能解组到csv然后元帅JSON(这似乎总解决办法)。
您可以使用jsonpath分裂JSON消息(并启用分配器EIP流更大的消息)
我结束了以下解决方案:
.split(body().tokenize("\n", 1_000, false))
.streaming()
.process(exchange -> {
String[] body = exchange.getIn().getBody(String.class).split("\n");
var records = new ArrayList<FooBar>(body.length);
for(String line: body) {
records.add(objectMapper.readValue(line, FooBar.class));
}
exchange.getIn().setBody(records);
})
objectMapper
是com.fasterxml.jackson.databind.ObjectMapper
例如,3.5 GB文件在〜1.2分钟进行处理。