首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Apache Camel处理大JSON数组

如何用Apache Camel处理大JSON数组
EN

Stack Overflow用户
提问于 2019-01-17 15:18:06
回答 2查看 1.5K关注 0票数 3

我想要实现类似于CSV流处理的东西:

代码语言:javascript
运行
复制
//read input file
.split(body().tokenize("\n", 100, false)).streaming()
            .unmarshal(new BindyCsvDataFormat( ...

我可以控制输入文件的内容,例如,可以将每个JSON对象放在新行上,而不需要JSON开始数组和每个对象后面的逗号:

代码语言:javascript
运行
复制
{"id": "foo1"}
{"id": "foo2"}
...

然后遵循与CSV相同的流(拆分和流),但我不能使用ListJacksonDataFormat.json(JsonLibrary.Jackson)解除封送

怎么做?或者还有其他读取大JSON数组的方法?

注意:这个处理必须是快速的,所以我不能像解释的here那样对csv进行解封处理,然后封送JSON (这似乎是一个很好的解决方案)。

EN

回答 2

Stack Overflow用户

发布于 2019-01-18 05:12:27

您可以使用jsonpath拆分JSon消息(并在拆分器EIP中为更大的消息启用流)

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

票数 0
EN

Stack Overflow用户

发布于 2019-02-05 08:35:18

最后,我得到了以下解决方案:

代码语言:javascript
运行
复制
.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.5GB的文件在1.2分钟内被处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54238970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档