我想要实现类似于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 (这似乎是一个很好的解决方案)。
发布于 2019-01-18 05:12:27
您可以使用jsonpath拆分JSon消息(并在拆分器EIP中为更大的消息启用流)
发布于 2019-02-05 08:35:18
最后,我得到了以下解决方案:
.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.5GB的文件在1.2分钟内被处理。
https://stackoverflow.com/questions/54238970
复制相似问题