Разделение массива Json с верблюдом

У меня есть верблюжий маршрут, который принимает объект String из json, вызывает 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}]

Любая помощь будет оценена.

2 ответа

Согласно документации Camel Jsonpath, тело сообщения разделенной части JSON-документа представляет собой карту.

Тем не менее, он говорит, что с верблюдом 2.20 или новее вы можете использовать jsonpathWriteAsString чтобы получить строку JSON вместо карты.

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

Для более ранних версий Camel необходимо использовать формат данных Camel JSON, чтобы упорядочить тело сообщения из Map в строку JSON.

Этот пост старый, но, поскольку я не люблю оставлять вопрос без ответа, я пытаюсь здесь.

Верблюд 2.17: функция сопоставления повторяет тело сообщения и группирует данные в подсписки указанного размера. Это можно использовать с разделителем EIP для разделения тела сообщения и группировки/пакетирования разделенного подсообщения в группу из N подсписков. Этот метод работает аналогично методу сопоставления в Groovy.

Как это использовать:

      <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>
Другие вопросы по тегам