Ошибка при публикации JSON с использованием NiFi против curl

Я вижу очень небольшую разницу между тем, как процессор NiFi InvokeHTTP выполняет POST-данные json, и тем, как это делает curl.

Проблема в том, что данные КАЖУТСЯ одинаковыми, когда я их регистрирую... но данные отображаются по-разному.

Кто-нибудь знает, что может быть не так? Благодарю вас!

CURL -- работает; правильная распечатка и визуализация

curl -X POST -H "Content-Type: application/json" -d '{ "responseID": "a1b2c3", "responseData": { "signals": [ "a", "b", "c" ] } } localhost:8998/userInput

Распечатка приложения WebServer

ID ответа: a1b2c3

данные ответа: {signals=[a, b, c]}

Визуализация шаблона

Визуализация/вывод шаблона для CURL

NiFi -- не работает; правильная распечатка, НО неверный рендер

  1. Создать FlowFile
  2. UpdateAttributes Конфигурация обновления атрибутов

  3. АтрибутыToJSON

  4. ВызватьHTTP

Распечатка приложения WebServer

ID ответа: a1b2c3

данные ответа: {signals=[a, b, c]}

Визуализация шаблона Шаблон рендеринга/вывода для NiFi


person Dan    schedule 21.07.2017    source источник


Ответы (1)


вам нужен такой json:

{ "responseID": "a1b2c3", "responseData": { "signals": [ "a", "b", "c" ] } }

но в нифи вы строите это:

{ "responseID": "a1b2c3", "responseData": "{ signals=[ a, b, c ] }" }

это означает, что вы создаете responseData просто как строку "{ signals=[ a, b, c ] }", но вам нужен объект

в nifi процессор AttributesToJSON создает только один объект уровня, поэтому вы можете создать последовательность AttributesToJSON -> EvaluateJsonPath -> AttributesToJSON для создания вложенных объектов json.

или используйте ExecuteStript с языком javascript или groovy - оба имеют хороший синтаксис для создания json.

person daggett    schedule 21.07.2017
comment
Я попробую. Я создавал NiFi JSON, например { "signals": [ "a", "b", "c" ] } }, но он интерпретировал его как строку... которая идет к вашей точке объекта одного уровня. - person Dan; 21.07.2017
comment
Я читал что-то о процессоре JoltTransformJSON... есть ли у NiFi способ программно обрабатывать динамический многоуровневый JSON? - person Dan; 21.07.2017
comment
программно - это ExecuteScript процессор. проверьте, например, это: stackoverflow.com/questions/44335048/ - person daggett; 21.07.2017
comment
Jolt - имеет некоторые ограничения, проверьте, приемлемо ли это: Сопоставление значений преобразования толчка в отдельных ветвях json">stackoverflow.com/questions/44169511/ - person daggett; 21.07.2017