如何处理与Apache的骆驼大JSON阵列

问题描述 投票:3回答:2

我想实现类似于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(这似乎总解决办法)。

java json jackson apache-camel
2个回答
0
投票

您可以使用jsonpath分裂JSON消息(并启用分配器EIP流更大的消息)

https://github.com/apache/camel/blob/master/components/camel-jsonpath/src/main/docs/jsonpath-language.adoc


0
投票

我结束了以下解决方案:

.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);
})

objectMappercom.fasterxml.jackson.databind.ObjectMapper

例如,3.5 GB文件在〜1.2分钟进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.