Разделение массива 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>