Как разбить массив входящих объектов Json в Spring XD?

Допустим, мои входящие данные - это объект json или массив объектов json. Я хочу разделить входящие данные json, если это массив, чтобы я мог вставить их в коллекцию MongoDB (для простоты давайте сейчас просто войдем в консоль).

  1. Определить поток

    xd:>stream create splittest - определение "http | json-to-tuple | splitter | log" --deploy

  2. Разместить один объект

    xd:> http post --data "{\" dog \ ": \" chihuahua \ "}"

    21T09: 05: 59-0700 1.2.0.RELEASE INFO pool-44-thread-4 sink.splittest - {"собака": "чихуахуа"}

    Это ожидаемый результат, поскольку входные данные были единым объектом - нечего разделять.

  3. Опубликовать массив объектов

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