Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApacheCamel处理大型JSON数组_Java_Json_Jackson_Apache Camel - Fatal编程技术网

Java 如何使用ApacheCamel处理大型JSON数组

Java 如何使用ApacheCamel处理大型JSON数组,java,json,jackson,apache-camel,Java,Json,Jackson,Apache Camel,我想实现与CSV流式处理类似的功能: //read input file .split(body().tokenize("\n", 100, false)).streaming() .unmarshal(new BindyCsvDataFormat( ... 我可以控制输入文件的内容,例如,我可以将每个JSON对象放在新行上,每个对象后面不带JSON起始数组和逗号: {"id": "foo1"} {"id": "foo2"} ... 然后遵循CSV中的相同流程(拆分和

我想实现与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(这似乎是一个很好的解决办法)。

您可以使用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);
})
.split(body().tokenize(“\n”,1\u 000,false))
.streaming()
.流程(交换->{
String[]body=exchange.getIn().getBody(String.class).split(“\n”);
var记录=新的ArrayList(body.length);
for(字符串行:正文){
add(objectMapper.readValue(line,FooBar.class));
}
exchange.getIn().setBody(记录);
})
objectMapper
com.fasterxml.jackson.databind.objectMapper


例如,一个3.5 GB的文件在大约1.2分钟内处理完毕。

在使用CSV时,我发现分批处理(例如,一次处理100个对象)比逐个处理快,但我不知道如何使用json path做到这一点。我只有一个大阵列,包含多达10k的小对象。