Dataweave - массив объектов для объекта в строке - PullRequest
0 голосов
/ 24 июня 2019

Мой вход является Array of Java Objects:

[{"name"="Demo","platform"=[{"id"="1","value"="ios"},{"id"="2","value"="android"}],"language"=[{"id"="1","value"="eng"}],"date"="20/05/2018"}, {"name"="Kernel","platform"=[{"id"="1","value"="macos"},{"id"="2","value"="linux"}],"language"=[{"id"="1","value"="ger"}],"date"="20/05/2018"}]

Каждый Java Object содержит массивы в Platform и языковой ключ , как в этом примере:

{"name"="Demo","platform"=[{"id"="1","value"="ios"},{"id"="2","value"="android"}],"language"=[{"id"="1","value"="eng"}],"date"="20/05/2018"}

Это выход , ожидаемый в text/plain типе:

{"name":"Demo","platform":[{"id":"1","value":"ios"},{"id":"2","value":"android"}],"language":[{"id":"1","value":"eng"}],"date":"20/05/2018"}
{"name":"Kernel","platform":[{"id":"1","value":"macos"},{"id":"2","value":"linux"}],"language":[{"id":"1","value":"ger"}],"date":"20/05/2018"}
  • Каждый объект от Java до JSON
  • Indent = falseна строку
  • Без скобок или запятых между объектами.Каждый объект в строке
  • не должен влиять на Платформа и язык массивы клавиш

Возможно ли применить это без необходимости играть с String replace?

1 Ответ

3 голосов
/ 25 июня 2019

Таким образом, вы можете использовать функцию записи для преобразования каждого элемента в application / json и со свойством writer indent = false

%dw 2.0
output text/plain
---
payload map ((item, index) -> write(item, "application/json", {indent: false})) reduce ((item, accumulator) -> item ++ "\n" ++ accumulator)

Или, если вы используете mule 4.2, вы можете напрямую использовать application/x-ndjson и егодолжен работать напрямую

%dw 2.0
output application/x-ndjson
---
payload
...