Как разбить массив входящих объектов Json в Spring XD?
Допустим, мои входящие данные - это объект json или массив объектов json. Я хочу разделить входящие данные json, если это массив, чтобы я мог вставить их в коллекцию MongoDB (для простоты давайте сейчас просто войдем в консоль).
Определить поток
xd:>stream create splittest - определение "http | json-to-tuple | splitter | log" --deploy
Разместить один объект
xd:> http post --data "{\" dog \ ": \" chihuahua \ "}"
21T09: 05: 59-0700 1.2.0.RELEASE INFO pool-44-thread-4 sink.splittest - {"собака": "чихуахуа"}
Это ожидаемый результат, поскольку входные данные были единым объектом - нечего разделять.
Опубликовать массив объектов
xd:>http post --data "[{\" собака \ ": \" пудель \"}, {\" собака \ ": \" чихуахуа \"}, {\" собака \ ": \" пудель \ " }]"
21T09: 43: 05-0700 1.2.0.RELEASE INFO pool-44-thread-11 sink.splittest - {}
В этом случае я ожидал увидеть три отдельных объекта собаки, напечатанных в каждой строке, но он напечатал один пустой объект.
Что я делаю неправильно? Может кто-нибудь подсказать, что можно / нужно было сделать?
1 ответ
Разобрался, как это сделать. Мне не нужно было беспокоиться об использовании процессора JSON-to-Tuple.
xd:>stream create splittest2 --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"}, {\"dog\":\"poodle\"}]"
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO pool-83-thread-4 sink.splittest2 - {dog=poodle}
Таким образом, он работает с несколькими объектами, однако не обрабатывает один объект, как я ожидал.
xd:>http post --data "{\"dog\":\"chihuahua\"}"
2015-10-21T10:56:11-0700 1.2.0.RELEASE INFO pool-83-thread-10 sink.splittest2 - chihuahua