Преобразование списка объектов в csv с помощью dataweave

Я пытаюсь преобразовать список объектов в CSV, используя следующий код в dataweave:

%dw 1.0
%type company = :object {class: "java.util.ArrayList"}
%input payload application/java
%output application/csv
---
{
    name: payload.name,
    address: payload.address
} as :company 

Ниже приведен результат, который я получаю, когда выполняю приведенный выше код переплетения данных.

name,name
testName,testName2
testAddress,testAddress2

пока я ожидаю следующее: (Образцы данных)

name,address
testName,testAddress
testName2,testAddress2

Помогите мне понять, чего мне не хватает в компоненте плетения данных


person clare    schedule 25.08.2015    source источник


Ответы (4)


В общих чертах, при использовании DataWeave вы описываете свой вывод, используя каноническое представление, которое является более или менее надмножеством других форматов данных.

Чтобы сгенерировать вывод CSV, вам необходимо сгенерировать массив объектов.
Каждый из этих объектов представляет строку CSV.
Объекты в DataWeave представляют собой наборы пар "ключ-значение"

Отображение должно быть примерно таким:

%dw 1.0
%output application/csv
---
payload map {
    name: $.name,
    address: $.address
}

Операция map здесь генерирует объект с name и address для каждой записи в списке. $ представляет неявную переменную при итерации (каждая запись в списке).

Примечание. Директива %input payload application/java не требуется, поскольку тип содержимого для вашего ввода (JSON, XML, CSV и т. Д.) Берется из сообщения mule, когда он установлен, и по умолчанию используется java, если он отсутствует.

person Shoki    schedule 25.08.2015

У меня работает следующее:

ВВОД:

%dw 1.0
%output application/java
---
[{
    name: "nameInput",
    address: "addressInput"
}]

КАРТА:

%dw 1.0 %output application/csv
---
payload

ВЫХОД:

name,address
nameInput,addressInput
person mtorsing    schedule 25.08.2015
comment
Спасибо :) Несмотря на то, что это работает, это не то, что я хочу. Я хочу указать поля, которые мне нужны в сопоставлении. - person clare; 25.08.2015

Разделитель с xpath в качестве оценщика должен помочь ... например:

<splitter evaluator="xpath" expression="/document/article"/>
person vijay narasimha reddy    schedule 10.01.2018

Для меня это похоже на то, что описал @Tilo в его сообщении, но мне пришлось добавить дополнительный "flatten "потому что в качестве входных данных я использовал массив массивов.

КАРТА:

%dw 1.0
%output application/csv
---
flatten payload
person Community    schedule 08.01.2020