如何使用Apache Camel处理大型JSON数组

3

我希望实现类似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数组的方法吗?

注意: 此处理必须快速进行,因此我不能像这里所解释的那样将其解组为csv,然后再将其组合成JSON(这似乎是一个粗略的解决方法)。


可能是camel如何使用流模式处理JSON?的重复问题。 - Echoinacup
2个回答

0

在处理CSV时,我发现分批处理(例如每次处理100个对象)比逐个处理更快,但是我不知道如何在JSON路径中实现这一点。 我只有一个包含最多10K个小对象的大数组。 - A5300

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分钟内被处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接