使用Camel拆分Json数组

rt4zxlrg  于 2022-12-29  发布在  Apache
关注(0)|答案(2)|浏览(170)

我有一个camel路径,它接受json的String对象,调用bean来剥离播放器的JSONArray。

from("direct:players").routeId("player_route")
    .bean(BootstrapStaticParser.class,"getPlayersList")
    .split(body())
    .to("direct:aws");

不过,我打电话之后:

.split(body())

应该是json字符串的东西只是到LinkedHashMap中,但我需要保持json格式才能将数据插入AWS DDB。
记录以显示问题
之前

Exchange[ExchangePattern: InOnly, BodyType: net.minidev.json.JSONArray, Body: [{"id":1,"photo":"48844.jpg","web_name":"Player1","team_code":3},{"id":2,"photo":"11334.jpg","web_name":"Player2","team_code":3},{"id":3,"photo":"98980.jpg","web_name":"Player3","team_code":3},{"id":4,"photo":"51507.jpg","web_name":"Player4","team_code":3},...]

之后

Exchange[ExchangePattern: InOnly, BodyType: java.util.LinkedHashMap, Body: {id=1, photo=48844.jpg, player=Player1, team_code=3}]

任何帮助都将不胜感激。

mitkmikd

mitkmikd1#

根据CamelJsonpath的文档,拆分的JSON文档部分的消息体是Map。
但是,它说使用Camel 2.20或更新版本,您可以使用jsonpathWriteAsString来获取JSON字符串,而不是Map。

.split().jsonpathWriteAsString("$.yourJsonPath")

对于早期版本的Camel,必须使用Camel JSON data format将消息正文从Map编组为JSON String。

nzkunb0c

nzkunb0c2#

这篇文章是旧的,但我不喜欢让一个问题没有答案,我试图在这里。
Camel 2.17:collate函数迭代消息体,并将数据分组到指定大小的子列表中。它可以与Splitter EIP一起使用来拆分消息体,并将拆分的子消息分组/批处理到一组N个子列表中。此方法的工作原理与Groovy中的collate方法类似。
使用方法:

<split ...>
    <!-- supposed an ArrayList of Json  -->        
    <simple>${collate(3)}</simple>
    
    <log message="Splited Body: ${body}" />
    <log message="Split dataSplitIndex: ${headers.dataSplitIndex}, isLast: ${exchangeProperty.CamelSplitComplete}" />
    
</split>

相关问题